/ Hex Artifact Content
Login

Artifact cdc9b0c2dc12273c60603eb6c4157dd998603039:


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 20 26 26 20  SC_VER>=1300 && 
1ab0: 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f  !defined(_WIN32_
1ac0: 57 43 45 29 0a 23 20 20 69 6e 63 6c 75 64 65 20  WCE).#  include 
1ad0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 70 72  <intrin.h>.#  pr
1ae0: 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f  agma intrinsic(_
1af0: 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29  byteswap_ushort)
1b00: 0a 23 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69  .#  pragma intri
1b10: 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75  nsic(_byteswap_u
1b20: 6c 6f 6e 67 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  long).#endif../*
1b30: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
1b40: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
1b50: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1b60: 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a  as 0, 1, or 2..*
1b70: 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65  * 0 means mutexe
1b80: 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c  s are permanentl
1b90: 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68  y disable and th
1ba0: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76  e library is nev
1bb0: 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65  er.** threadsafe
1bc0: 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  1 means the l
1bd0: 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c  ibrary is serial
1be0: 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68  ized which is th
1bf0: 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76  e highest.** lev
1c00: 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65  el of threadsafe
1c10: 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  ty.  2 means the
1c20: 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74   library is mult
1c30: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1c40: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1c50: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1c60: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1c70: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
1c80: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
1c90: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1ca0: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
1cb0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
1cc0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
1cd0: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1ce0: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1cf0: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1d00: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1d10: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1d20: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1d30: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1d40: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1d50: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1d60: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1d70: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
1d80: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
1d90: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
1da0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
1db0: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
1dc0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1dd0: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1de0: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1df0: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1e00: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1e10: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1e20: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1e30: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1e40: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1e50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e60: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1e70: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
1e80: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1e90: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
1ea0: 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45  ../*.** EVIDENCE
1eb0: 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30  -OF: R-25715-370
1ec0: 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  72 Memory alloca
1ed0: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
1ee0: 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a  are enabled by.*
1ef0: 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73  * default unless
1f00: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
1f10: 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f  led with SQLITE_
1f20: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1f30: 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20  S=0 in.** which 
1f40: 63 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  case memory allo
1f50: 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  cation statistic
1f60: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62  s are disabled b
1f70: 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  y default..*/.#i
1f80: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1f90: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1fa0: 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TUS).# define SQ
1fb0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
1fc0: 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a  STATUS 1.#endif.
1fd0: 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f  ./*.** Exactly o
1fe0: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1ff0: 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20  ing macros must 
2000: 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72  be defined in or
2010: 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66  der to.** specif
2020: 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61  y which memory a
2030: 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73  llocation subsys
2040: 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a  tem to use..**.*
2050: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53  *     SQLITE_SYS
2060: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  TEM_MALLOC      
2070: 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61      // Use norma
2080: 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  l system malloc(
2090: 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  ).**     SQLITE_
20a0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20  WIN32_MALLOC    
20b0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69         // Use Wi
20c0: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
20d0: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
20e0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20  E_ZERO_MALLOC   
20f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2100: 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72  a stub allocator
2110: 20 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69   that always fai
2120: 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ls.**     SQLITE
2130: 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20  _MEMDEBUG       
2140: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67          // Debug
2150: 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20  ging version of 
2160: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2170: 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73  **.** On Windows
2180: 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  , if the SQLITE_
2190: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c  WIN32_MALLOC_VAL
21a0: 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64  IDATE macro is d
21b0: 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a  efined and the.*
21c0: 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f  * assert() macro
21d0: 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63   is enabled, eac
21e0: 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  h call into the 
21f0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
2200: 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77  p subsystem.** w
2210: 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61  ill cause HeapVa
2220: 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c  lidate to be cal
2230: 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61  led.  If heap va
2240: 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  lidation should 
2250: 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65  fail, an.** asse
2260: 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72  rtion will be tr
2270: 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  iggered..**.** I
2280: 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62  f none of the ab
2290: 6f 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c  ove are defined,
22a0: 20 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45   then set SQLITE
22b0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61  _SYSTEM_MALLOC a
22c0: 73 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  s.** the default
22d0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
22e0: 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d  (SQLITE_SYSTEM_M
22f0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2300: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
2310: 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  2_MALLOC) \.  + 
2320: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a  defined(SQLITE_Z
2330: 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  ERO_MALLOC) \.  
2340: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2350: 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65  _MEMDEBUG)>1.# e
2360: 72 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72  rror "Two or mor
2370: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2380: 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ng compile-time 
2390: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
23a0: 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69  tions\. are defi
23b0: 6e 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20  ned but at most 
23c0: 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c  one is allowed:\
23d0: 0a 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  . SQLITE_SYSTEM_
23e0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57  MALLOC, SQLITE_W
23f0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  IN32_MALLOC, SQL
2400: 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20  ITE_MEMDEBUG,\. 
2410: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2420: 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  OC".#endif.#if d
2430: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
2440: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
2450: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2460: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
2470: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2480: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2490: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
24a0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
24b0: 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ==0.# define SQL
24c0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
24d0: 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  C 1.#endif../*.*
24e0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c  * If SQLITE_MALL
24f0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73  OC_SOFT_LIMIT is
2500: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
2510: 74 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a  try to keep the.
2520: 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f  ** sizes of memo
2530: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62  ry allocations b
2540: 65 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20  elow this value 
2550: 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a  where possible..
2560: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2570: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2580: 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69  FT_LIMIT).# defi
2590: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ne SQLITE_MALLOC
25a0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34  _SOFT_LIMIT 1024
25b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57  .#endif../*.** W
25c0: 65 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65  e need to define
25d0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61   _XOPEN_SOURCE a
25e0: 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64  s follows in ord
25f0: 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20  er to enable.** 
2600: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
2610: 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73  s on most Unix s
2620: 79 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f  ystems and fchmo
2630: 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a  d() on OpenBSD..
2640: 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f  ** But _XOPEN_SO
2650: 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73  URCE define caus
2660: 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20  es problems for 
2670: 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69  Mac OS X, so omi
2680: 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20  t.** it..*/.#if 
2690: 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f  !defined(_XOPEN_
26a0: 53 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69  SOURCE) && !defi
26b0: 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20  ned(__DARWIN__) 
26c0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50  && !defined(__AP
26d0: 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65  PLE__).#  define
26e0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36   _XOPEN_SOURCE 6
26f0: 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  00.#endif../*.**
2700: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
2710: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
2720: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
2730: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
2740: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
2750: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
2760: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2770: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
2780: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
2790: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
27a0: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
27b0: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
27c0: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
27d0: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
27e0: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
27f0: 20 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64   and faster by d
2800: 69 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20  isabling the.** 
2810: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2820: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e  nts in the code.
2830: 20 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65    So we want the
2840: 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a   default action.
2850: 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45  ** to be for NDE
2860: 42 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e  BUG to be set an
2870: 64 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75  d NDEBUG to be u
2880: 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66  ndefined only if
2890: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a   SQLITE_DEBUG.**
28a0: 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e   is set.  Thus N
28b0: 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e  DEBUG becomes an
28c0: 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74   opt-in rather t
28d0: 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a  han an opt-out.*
28e0: 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69  * feature..*/.#i
28f0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
2900: 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  G) && !defined(S
2910: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20  QLITE_DEBUG) .# 
2920: 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a  define NDEBUG 1.
2930: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2940: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 64 65  ed(NDEBUG) && de
2950: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2960: 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42  UG).# undef NDEB
2970: 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  UG.#endif../*.**
2980: 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45   Enable SQLITE_E
2990: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
29a0: 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45  MMENTS if SQLITE
29b0: 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e 65 64  _DEBUG is turned
29c0: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   on..*/.#if !def
29d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
29e0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
29f0: 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65 64 28  NTS) && defined(
2a00: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20  SQLITE_DEBUG).# 
2a10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
2a20: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
2a30: 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a  MENTS 1.#endif..
2a40: 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61  /*.** The testca
2a50: 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  se() macro is us
2a60: 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76  ed to aid in cov
2a70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20  erage testing.  
2a80: 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63  When .** doing c
2a90: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c  overage testing,
2aa0: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
2ab0: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
2ac0: 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73  nt to.** testcas
2ad0: 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c  e() must be eval
2ae0: 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20  uated both true 
2af0: 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64  and false in ord
2b00: 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c  er to.** get ful
2b10: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
2b20: 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65  e.  The testcase
2b30: 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65  () macro is inse
2b40: 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20  rted.** to help 
2b50: 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20  ensure adequate 
2b60: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e  test coverage in
2b70: 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69   places where si
2b80: 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  mple.** conditio
2b90: 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72  n/decision cover
2ba0: 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74  age is inadequat
2bb0: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
2bc0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2bd0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
2be0: 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79  ke sure boundary
2bf0: 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74   values are test
2c00: 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d  ed.  For.** bitm
2c10: 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63  ask tests, testc
2c20: 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65  ase() can be use
2c30: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
2c40: 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69  ach bit.** is si
2c50: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73  gnificant and us
2c60: 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
2c70: 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61  .  On switch sta
2c80: 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65  tements.** where
2c90: 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20   multiple cases 
2ca0: 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62  go to the same b
2cb0: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65  lock of code, te
2cc0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2cd0: 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20  insure that all 
2ce0: 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61  cases are evalua
2cf0: 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65  ted..**.*/.#ifde
2d00: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
2d10: 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  E_TEST.  void sq
2d20: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e  lite3Coverage(in
2d30: 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73  t);.# define tes
2d40: 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20  tcase(X)  if( X 
2d50: 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  ){ sqlite3Covera
2d60: 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a  ge(__LINE__); }.
2d70: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74  #else.# define t
2d80: 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69  estcase(X).#endi
2d90: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53  f../*.** The TES
2da0: 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75  TONLY macro is u
2db0: 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76  sed to enclose v
2dc0: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
2dd0: 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72  ions or.** other
2de0: 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68   bits of code th
2df0: 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f  at are needed to
2e00: 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67   support the arg
2e10: 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e  uments.** within
2e20: 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20   testcase() and 
2e30: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e  assert() macros.
2e40: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2e50: 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  (NDEBUG) || defi
2e60: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2e70: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2e80: 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20  ne TESTONLY(X)  
2e90: 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  X.#else.# define
2ea0: 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e   TESTONLY(X).#en
2eb0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74  dif../*.** Somet
2ec0: 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73  imes we need a s
2ed0: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63  mall amount of c
2ee0: 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61  ode such as a va
2ef0: 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a  riable initializ
2f00: 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75  ation.** to setu
2f10: 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73  p for a later as
2f20: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2f30: 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e  .  We do not wan
2f40: 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a  t this code to.*
2f50: 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73  * appear when as
2f60: 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
2f70: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
2f80: 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72  ng macro is ther
2f90: 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  efore.** used to
2fa0: 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65   contain that se
2fb0: 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22  tup code.  The "
2fc0: 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61  VVA" acronym sta
2fd0: 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69  nds for.** "Veri
2fe0: 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
2ff0: 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64  tion, and Accred
3000: 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74  itation".  In ot
3010: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a  her words, the.*
3020: 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56  * code within VV
3030: 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e  A_ONLY() will on
3040: 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65  ly run during ve
3050: 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65  rification proce
3060: 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  sses..*/.#ifndef
3070: 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65   NDEBUG.# define
3080: 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a   VVA_ONLY(X)  X.
3090: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
30a0: 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  VA_ONLY(X).#endi
30b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57  f../*.** The ALW
30c0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61  AYS and NEVER ma
30d0: 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f  cros surround bo
30e0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
30f0: 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20  s which .** are 
3100: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
3110: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
3120: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
3130: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
3140: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
3150: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
3160: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
3170: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
3180: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
3190: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
31a0: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
31b0: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
31c0: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
31d0: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
31e0: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
31f0: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
3200: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
3210: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
3220: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
3230: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
3240: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
3250: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
3260: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
3270: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3280: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3290: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
32a0: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
32b0: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
32c0: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
32d0: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
32e0: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
32f0: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
3300: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
3310: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
3320: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
3330: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
3340: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
3350: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
3360: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3370: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3380: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3390: 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64  (X)      (1).# d
33a0: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
33b0: 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21       (0).#elif !
33c0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a  defined(NDEBUG).
33d0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
33e0: 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28  X)      ((X)?1:(
33f0: 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20  assert(0),0)).# 
3400: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3410: 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65        ((X)?(asse
3420: 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73  rt(0),1):0).#els
3430: 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  e.# define ALWAY
3440: 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20  S(X)      (X).# 
3450: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3460: 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66        (X).#endif
3470: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74  ../*.** Declarat
3480: 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72  ions used for tr
3490: 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74  acing the operat
34a0: 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72  ing system inter
34b0: 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  faces..*/.#if de
34c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52  fined(SQLITE_FOR
34d0: 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  CE_OS_TRACE) || 
34e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
34f0: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
3500: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3510: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
3520: 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20  S_WIN).  extern 
3530: 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61  int sqlite3OSTra
3540: 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  ce;.# define OST
3550: 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20  RACE(X)         
3560: 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72   if( sqlite3OSTr
3570: 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62  ace ) sqlite3Deb
3580: 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66  ugPrintf X.# def
3590: 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ine SQLITE_HAVE_
35a0: 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23  OS_TRACE.#else.#
35b0: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
35c0: 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  X).# undef  SQLI
35d0: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
35e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
35f0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72  s the sqlite3Err
3600: 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  Name() function 
3610: 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75  needed in the bu
3620: 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ild?  Currently,
3630: 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64  .** it is needed
3640: 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63   by "mutex_w32.c
3650: 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e  " (when debuggin
3660: 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28  g), "os_win.c" (
3670: 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20  when.** OSTRACE 
3680: 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64  is enabled), and
3690: 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73   by several "tes
36a0: 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69  t*.c" files (whi
36b0: 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c  ch are.** compil
36c0: 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ed using SQLITE_
36d0: 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65  TEST)..*/.#if de
36e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
36f0: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
3700: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
3710: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
3720: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3730: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
3740: 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53  _WIN).# define S
3750: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3760: 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65  AME.#else.# unde
3770: 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  f  SQLITE_NEED_E
3780: 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a  RR_NAME.#endif..
3790: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
37a0: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
37b0: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
37c0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
37d0: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
37e0: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
37f0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
3800: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
3810: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
3820: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
3830: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
3840: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
3850: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
3860: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
3870: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
3880: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
3890: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
38a0: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
38b0: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
38c0: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
38d0: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
38e0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
38f0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
3900: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
3910: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
3920: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3930: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
3940: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
3950: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
3960: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
3970: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
3980: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
3990: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
39a0: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
39b0: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
39c0: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
39d0: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
39e0: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
39f0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
3a00: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
3a10: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
3a20: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
3a30: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
3a40: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
3a50: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
3a60: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
3a70: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
3a80: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
3a90: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  ef.h>../*.** If 
3aa0: 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20  compiling for a 
3ab0: 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c  processor that l
3ac0: 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f  acks floating po
3ad0: 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20  int support,.** 
3ae0: 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67  substitute integ
3af0: 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er for floating-
3b00: 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20  point.*/.#ifdef 
3b10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3b20: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
3b30: 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74  ine double sqlit
3b40: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3b50: 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e   float sqlite_in
3b60: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  t64.# define LON
3b70: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c  GDOUBLE_TYPE sql
3b80: 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64  ite_int64.# ifnd
3b90: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
3ba0: 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  L.#   define SQL
3bb0: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73  ITE_BIG_DBL (((s
3bc0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c  qlite3_int64)1)<
3bd0: 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64  <50).# endif.# d
3be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
3bf0: 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
3c00: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3c10: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a  TE_OMIT_TRACE 1.
3c20: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
3c30: 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49  IXED_ENDIAN_64BI
3c40: 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20  T_FLOAT.# undef 
3c50: 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41  SQLITE_HAVE_ISNA
3c60: 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  N.#endif.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3c80: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3c90: 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23  BIG_DBL (1e99).#
3ca0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49  endif../*.** OMI
3cb0: 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20  T_TEMPDB is set 
3cc0: 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f  to 1 if SQLITE_O
3cd0: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65  MIT_TEMPDB is de
3ce0: 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61  fined, or 0.** a
3cf0: 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67  fterward. Having
3d00: 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f   this macro allo
3d10: 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74  ws us to cause t
3d20: 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a  he C compiler .*
3d30: 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75  * to omit code u
3d40: 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c  sed by TEMP tabl
3d50: 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79  es without messy
3d60: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
3d70: 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  nts..*/.#ifdef S
3d80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
3d90: 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  B.#define OMIT_T
3da0: 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64  EMPDB 1.#else.#d
3db0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3dc0: 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B 0.#endif../*.*
3dd0: 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d  * The "file form
3de0: 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e  at" number is an
3df0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
3e00: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
3e10: 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42  never.** the VDB
3e20: 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72  E-level file for
3e30: 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68  mat changes.  Th
3e40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3e50: 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a  os define the.**
3e60: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c   the default fil
3e70: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77  e format for new
3e80: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
3e90: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
3ea0: 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74  format.** that t
3eb0: 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72  he library can r
3ec0: 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ead..*/.#define 
3ed0: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f  SQLITE_MAX_FILE_
3ee0: 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66  FORMAT 4.#ifndef
3ef0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3f00: 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65  FILE_FORMAT.# de
3f10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3f20: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  ULT_FILE_FORMAT 
3f30: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
3f40: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
3f50: 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72  r triggers are r
3f60: 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61  ecursive by defa
3f70: 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62  ult.  This can b
3f80: 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20  e.** changed at 
3f90: 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61  run-time using a
3fa0: 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e   pragma..*/.#ifn
3fb0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
3fc0: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
3fd0: 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53  GGERS.# define S
3fe0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
3ff0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
4000: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
4010: 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75   Provide a defau
4020: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c  lt value for SQL
4030: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
4040: 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74  n case it is not
4050: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e   specified.** on
4060: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
4070: 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
4080: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23  ITE_TEMP_STORE.#
4090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
40a0: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65  EMP_STORE 1.# de
40b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
40c0: 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20  _STORE_xc 1  /* 
40d0: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
40e0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
40f0: 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75  /*.** If no valu
4100: 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69  e has been provi
4110: 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d  ded for SQLITE_M
4120: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4130: 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49  S, or if.** SQLI
4140: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  TE_TEMP_STORE is
4150: 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72   set to 3 (never
4160: 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66   use temporary f
4170: 69 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a  iles), set it .*
4180: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
4190: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
41a0: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
41b0: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
41c0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
41d0: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
41e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
41f0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4200: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
4210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
4220: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
4230: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4240: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4250: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
4260: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4270: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
4280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4290: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
42a0: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
42b0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
42c0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
42d0: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
42e0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
42f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
4300: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
4310: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4320: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4330: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
4340: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4350: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4360: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
4370: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
4380: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
4390: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
43a0: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
43b0: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
43c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
43d0: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
43e0: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
43f0: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
4400: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
4410: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
4420: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
4430: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
4440: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
4450: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
4460: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
4470: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
4480: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4490: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
44a0: 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65  _INITSZ.# define
44b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
44c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 31 30  PCACHE_INITSZ 10
44d0: 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  0.#endif.../*.**
44e0: 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65   GCC does not de
44f0: 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f  fine the offseto
4500: 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27  f() macro so we'
4510: 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74  ll have to do it
4520: 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a  .** ourselves..*
4530: 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74  /.#ifndef offset
4540: 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65  of.#define offse
4550: 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49  tof(STRUCTURE,FI
4560: 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61  ELD) ((int)((cha
4570: 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a  r*)&((STRUCTURE*
4580: 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e  )0)->FIELD)).#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
45a0: 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e  s to compute min
45b0: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d  imum and maximum
45c0: 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e   of two numbers.
45d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28  .*/.#define MIN(
45e0: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
45f0: 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d  ):(B)).#define M
4600: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
4610: 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a  ?(A):(B))../*.**
4620: 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74   Swap two object
4630: 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a  s of type TYPE..
4640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28  */.#define SWAP(
4650: 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20  TYPE,A,B) {TYPE 
4660: 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a  t=A; A=B; B=t;}.
4670: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
4680: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
4690: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
46a0: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
46b0: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
46c0: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
46d0: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
46e0: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
46f0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
4700: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
4710: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
4720: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4730: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
4740: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
4750: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
4760: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
4770: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
4780: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
4790: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
47a0: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
47b0: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
47c0: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
47d0: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
47e0: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
47f0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
4800: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
4810: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
4820: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
4830: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
4840: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4850: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4860: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4870: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4880: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4890: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
48a0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
48b0: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
48c0: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
48d0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
48e0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
48f0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
4900: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
4910: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
4920: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4930: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4940: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4950: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4960: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4970: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4980: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4990: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
49a0: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
49b0: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
49c0: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
49d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
49e0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
49f0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
4a00: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
4a10: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4a20: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4a30: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4a40: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4a50: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4a60: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4a70: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4a80: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4a90: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4aa0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4ab0: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
4ac0: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
4ad0: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
4ae0: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
4af0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4b00: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
4b10: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4b20: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4b30: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4b40: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4b50: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4b60: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4b70: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4b80: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4b90: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4ba0: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4bb0: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
4bc0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
4bd0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4be0: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
4bf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
4c00: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4c10: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4c20: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4c30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4c40: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4c50: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4c60: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4c70: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4c80: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4c90: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4ca0: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
4cc0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4cd0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
4ce0: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
4cf0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
4d00: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
4d10: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4d20: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4d30: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4d40: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4d50: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4d60: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4d70: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4d80: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4d90: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4da0: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4db0: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
4dc0: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
4dd0: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
4de0: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
4df0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
4e00: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
4e10: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4e20: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4e30: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4e40: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4e50: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4e60: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4e70: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4e80: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4e90: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4ea0: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4eb0: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
4ec0: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
4ed0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
4ee0: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
4ef0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
4f00: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
4f10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4f20: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4f30: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4f40: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
4f50: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
4f60: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
4f70: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
4f80: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
4f90: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
4fa0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
4fb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
4fc0: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
4fd0: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
4fe0: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
4ff0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
5000: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
5010: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
5020: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
5030: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
5040: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
5050: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
5060: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
5070: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
5080: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
5090: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
50a0: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
50b0: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
50c0: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
50d0: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
50e0: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
50f0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
5100: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
5110: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
5120: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
5130: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
5140: 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  tities are suppo
5150: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
5160: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
5170: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
5180: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
5190: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
51a0: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
51b0: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
51c0: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
51d0: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
51e0: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
5200: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
5210: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
5220: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
5230: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
5240: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
5250: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
5260: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
5270: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
5280: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
5290: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
52a0: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
52b0: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
52c0: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
52d0: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
52e0: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
52f0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
5300: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
5310: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
5320: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
5330: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
5340: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
5350: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
5360: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
5370: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
5380: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
5390: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
53a0: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
53b0: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
53c0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
53d0: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
53e0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
53f0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
5400: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
5410: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
5420: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
5430: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
5440: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
5450: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
5460: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
5470: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
5480: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
5490: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
54a0: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
54b0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
54c0: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
54d0: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
54e0: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
54f0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5500: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
5510: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
5520: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
5530: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
5540: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
5550: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
5560: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
5570: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
5580: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
5590: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
55a0: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
55b0: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
55c0: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
55d0: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
55e0: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
55f0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
5600: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
5610: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
5620: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
5630: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
5640: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
5650: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
5660: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5670: 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65  ER=1 is set, the
5680: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
5690: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
56a0: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
56b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
56c0: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
56d0: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
56e0: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
56f0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
5700: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
5710: 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20   (defined(i386) 
5720: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5730: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
5740: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5750: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5760: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
5770: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
5780: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
5790: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
57a0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
57b0: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
57c0: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
57d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
57e0: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
57f0: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
5800: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
5810: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
5820: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
5830: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
5840: 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69  R    1234.# defi
5850: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5860: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
5870: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
5880: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
5890: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
58a0: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
58b0: 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28  6LE.#endif.#if (
58c0: 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20  defined(sparc)  
58d0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70    || defined(__p
58e0: 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26  pc__))  \.    &&
58f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
5900: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5910: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
5920: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
5930: 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53   4321.# define S
5940: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5950: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
5960: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5970: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
5980: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5990: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
59a0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
59b0: 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f  ned(SQLITE_BYTEO
59c0: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
59d0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
59e0: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
59f0: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5a00: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5a10: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a20: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5a30: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5a40: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5a50: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5a60: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5a70: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5a80: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
5a90: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5aa0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
5ab0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
5ac0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
5ad0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
5ae0: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
5af0: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
5b00: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
5b10: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
5b20: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
5b30: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
5b40: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
5b50: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
5b60: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
5b70: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
5b80: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
5b90: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
5ba0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
5bb0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
5bc0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
5bd0: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
5be0: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
5bf0: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
5c00: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
5c10: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
5c20: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
5c30: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
5c40: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
5c50: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
5c60: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
5c70: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5c80: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
5c90: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
5ca0: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
5cb0: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
5cc0: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
5cd0: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
5ce0: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
5cf0: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
5d00: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
5d10: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
5d20: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
5d30: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5d40: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
5d50: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
5d60: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
5d70: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
5d80: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
5d90: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
5da0: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
5db0: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
5dc0: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
5dd0: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
5de0: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
5df0: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
5e00: 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  on might return 
5e10: 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  us 4-byte aligne
5e20: 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20  d.** pointers.  
5e30: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e  In that case, on
5e40: 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65  ly verify 4-byte
5e50: 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23   alignment..*/.#
5e60: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42  ifdef SQLITE_4_B
5e70: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5e80: 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  OC.# define EIGH
5e90: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5ea0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
5eb0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
5ec0: 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  3)==0).#else.# d
5ed0: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5ee0: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5ef0: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5f00: 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29  (char*)0)&7)==0)
5f10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5f20: 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70  isable MMAP on p
5f30: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69  latforms where i
5f40: 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f  t is known to no
5f50: 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65  t work.*/.#if de
5f60: 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f  fined(__OpenBSD_
5f70: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
5f80: 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65  QNXNTO__).# unde
5f90: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
5fa0: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5fb0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5fc0: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SIZE 0.#endif../
5fd0: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78  *.** Default max
5fe0: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d  imum size of mem
5ff0: 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f  ory used by memo
6000: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e  ry-mapped I/O in
6010: 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64   the VFS.*/.#ifd
6020: 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69  ef __APPLE__.# i
6030: 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f  nclude <TargetCo
6040: 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20  nditionals.h>.# 
6050: 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48  if TARGET_OS_IPH
6060: 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51  ONE.#   undef SQ
6070: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6080: 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  ZE.#   define SQ
6090: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
60a0: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
60b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
60c0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
60d0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
60e0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
60f0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
6100: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
6110: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
6120: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
6130: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
6140: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
6150: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
6160: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
6170: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
6180: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6190: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
61a0: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
61b0: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
61c0: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
61d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
61e0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
61f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
6200: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
6210: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
6220: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
6230: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
6240: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6250: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
6260: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
6270: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
6280: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
6290: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
62a0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
62b0: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
62c0: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
62d0: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
62e0: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
62f0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
6300: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6310: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
6320: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
6330: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
6340: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6350: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
6360: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
6370: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
6380: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
6390: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
63a0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
63b0: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
63c0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
63d0: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
63e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
63f0: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
6400: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
6410: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
6420: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
6430: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
6440: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6450: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
6460: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
6470: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
6480: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
6490: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
64a0: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
64b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
64c0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
64d0: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
64e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
64f0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
6500: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
6510: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6520: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6530: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
6540: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
6550: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6560: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6570: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6580: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6590: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
65a0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
65b0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
65c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
65d0: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
65e0: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
65f0: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
6600: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
6610: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
6620: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
6630: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
6640: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
6650: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
6660: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
6670: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
6680: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
6690: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
66a0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
66b0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
66c0: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
66d0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
66e0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
66f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
6700: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
6710: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
6720: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
6730: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
6740: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
6750: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
6760: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
6770: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
6780: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
6790: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
67a0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
67b0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
67c0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
67d0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
67e0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
67f0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
6800: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
6810: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
6820: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
6830: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
6840: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
6850: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
6860: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
6870: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6880: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
6890: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
68a0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
68b0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
68c0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
68d0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
68e0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
68f0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
6900: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
6910: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
6920: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
6930: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
6940: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
6950: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
6960: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
6970: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
6980: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
6990: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
69a0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
69b0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
69c0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
69d0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
69e0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
69f0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6a00: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6a10: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6a20: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6a30: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6a40: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
6a50: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
6a60: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
6a70: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6a80: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
6a90: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
6aa0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6ab0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6ac0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6ad0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6ae0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6af0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6b00: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6b10: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6b20: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6b30: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6b40: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
6b50: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
6b60: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
6b70: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
6b80: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
6b90: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
6ba0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6bb0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6bc0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6bd0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6be0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6bf0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6c00: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6c10: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6c20: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6c30: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6c40: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
6c50: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
6c60: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
6c70: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
6c80: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
6c90: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
6ca0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6cb0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6cc0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6cd0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6ce0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6cf0: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6d00: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6d10: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6d20: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6d30: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6d40: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
6d50: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
6d60: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
6d70: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
6d80: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
6d90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6da0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6db0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6dc0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6dd0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6de0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6df0: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6e00: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6e10: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6e20: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6e30: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6e40: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
6e50: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
6e60: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
6e70: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
6e80: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6e90: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6ea0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6eb0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6ec0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6ed0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6ee0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6ef0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6f00: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6f10: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6f20: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6f30: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6f40: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
6f50: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
6f60: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
6f70: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
6f80: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
6f90: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
6fa0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6fb0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6fc0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6fd0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6fe0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6ff0: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
7000: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
7010: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
7020: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
7030: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
7040: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7050: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7060: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7070: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7080: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7090: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
70a0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
70b0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
70c0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
70d0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
70e0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
70f0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7100: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
7110: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
7120: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
7130: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
7140: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7150: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7160: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7170: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7180: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7190: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
71a0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
71b0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
71c0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
71d0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
71e0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
71f0: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
7200: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
7210: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
7220: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
7230: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
7240: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
7250: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
7260: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7270: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
7280: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
7290: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
72a0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
72b0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
72c0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
72d0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
72e0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
72f0: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
7300: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
7310: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
7320: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
7330: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
7340: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
7350: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
7360: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
7370: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
7380: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
7390: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
73a0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
73b0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
73c0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
73d0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
73e0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
73f0: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
7400: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
7410: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
7420: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
7430: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
7440: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
7450: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
7460: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
7470: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
7480: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
7490: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
74a0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
74b0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
74c0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
74d0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
74e0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
74f0: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
7500: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
7510: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
7520: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
7530: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
7540: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
7550: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
7560: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
7570: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
7580: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
7590: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
75a0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
75b0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
75c0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
75d0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
75e0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
75f0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
7600: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
7610: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
7620: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
7630: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
7640: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
7650: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
7660: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
7670: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
7680: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
7690: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
76a0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
76b0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
76c0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
76d0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
76e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
76f0: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
7700: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
7710: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
7720: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
7730: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
7740: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
7750: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
7760: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
7770: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
7780: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
7790: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
77a0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
77b0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
77c0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
77d0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
77e0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
77f0: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
7800: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
7810: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7820: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
7830: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
7840: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7850: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
7860: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7870: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
7880: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
7890: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
78a0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
78b0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
78c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78d0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
78e0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
78f0: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
7900: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
7910: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
7920: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
7930: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
7940: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
7950: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
7960: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
7970: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
7980: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
7990: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
79a0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
79b0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
79c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
79d0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
79e0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
79f0: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
7a00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a10: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
7a20: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
7a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a40: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
7a50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
7a60: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
7a70: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7a80: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
7a90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7aa0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
7ab0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
7ac0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
7ad0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
7ae0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7af0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
7b00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b10: 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75  StrAccum StrAccu
7b20: 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  m;.typedef struc
7b30: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
7b40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7b50: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
7b60: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
7b70: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
7b80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7b90: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
7ba0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7bb0: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
7bc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7bd0: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
7be0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
7bf0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
7c00: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
7c10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
7c20: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
7c30: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
7c40: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
7c50: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
7c60: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
7c70: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
7c80: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
7c90: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
7ca0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
7cb0: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
7cc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
7cd0: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
7ce0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
7cf0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
7d00: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
7d10: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
7d20: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
7d30: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
7d40: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
7d50: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
7d60: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
7d70: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
7d80: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
7d90: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
7da0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
7db0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
7dc0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
7dd0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
7de0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
7df0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
7e00: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7e10: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
7e20: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
7e30: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
7e40: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
7e50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7e60: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
7e70: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
7e80: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
7e90: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
7ea0: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
7eb0: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
7ec0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
7ed0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
7ee0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
7ef0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7f00: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7f10: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
7f20: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
7f30: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
7f40: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
7f50: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
7f60: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
7f70: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7f80: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
7f90: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
7fa0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
7fb0: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
7fc0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
7fd0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
7fe0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
7ff0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
8000: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
8010: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
8020: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
8030: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
8040: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
8050: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
8060: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
8070: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8080: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
8090: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
80a0: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
80b0: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
80c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
80d0: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
80e0: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
80f0: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
8100: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
8110: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
8120: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
8130: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
8140: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
8150: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
8160: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
8170: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
8180: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
8190: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
81a0: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
81b0: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
81c0: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
81d0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
81e0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
81f0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
8200: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
8210: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
8220: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
8230: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
8240: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
8250: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
8260: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
8270: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
8280: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
8290: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
82a0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
82b0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
82c0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
82d0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
82e0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
82f0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
8300: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
8310: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
8320: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
8330: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
8340: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
8350: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
8360: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
8370: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
8380: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
8390: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
83a0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
83b0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
83c0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
83d0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
83e0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
83f0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
8400: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
8410: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
8420: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
8430: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
8440: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
8450: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
8460: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
8470: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8480: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
8490: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
84a0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
84b0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
84c0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
84d0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
84e0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
84f0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
8500: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
8510: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
8520: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
8530: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
8540: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
8550: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
8560: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
8570: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
8580: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
8590: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
85a0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
85b0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
85d0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
85e0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
85f0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
8600: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
8610: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
8620: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
8630: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
8640: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
8650: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
8660: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
8670: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
8680: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
8690: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
86a0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
86b0: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
86c0: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
86d0: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
86e0: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
86f0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
8700: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8710: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8720: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
8730: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
8740: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
8750: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8760: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8770: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
8780: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
8790: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
87a0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
87b0: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
87c0: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
87d0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
87e0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
87f0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8800: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
8810: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
8820: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
8830: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
8840: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
8850: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
8860: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
8870: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8880: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
8890: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
88a0: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
88b0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
88c0: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
88d0: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
88e0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
88f0: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
8900: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
8910: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
8920: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
8930: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
8940: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
8950: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
8960: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
8970: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
8980: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
8990: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
89a0: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
89b0: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
89c0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
89d0: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
89e0: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
89f0: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8a00: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8a10: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
8a20: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
8a30: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
8a40: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
8a50: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
8a60: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
8a70: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
8a80: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
8a90: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
8aa0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8ab0: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8ad0: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8ae0: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8af0: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8b00: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8b10: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
8b20: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
8b30: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
8b40: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
8b50: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
8b60: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
8b70: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
8b80: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
8b90: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8ba0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8bb0: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8bc0: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8bd0: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8be0: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8bf0: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8c00: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8c10: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
8c20: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
8c30: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
8c40: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
8c50: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
8c60: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
8c70: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
8c80: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
8c90: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
8ca0: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8cb0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8cc0: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8cd0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8ce0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8cf0: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8d00: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8d10: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
8d20: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
8d30: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
8d40: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
8d50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
8d60: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
8d70: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
8d80: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
8d90: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8da0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8db0: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
8dc0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8dd0: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
8de0: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
8df0: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
8e00: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8e10: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
8e20: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
8e30: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
8e40: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8e50: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
8e60: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
8e70: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
8e80: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
8e90: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
8ea0: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
8eb0: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
8ec0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8ed0: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
8ee0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
8ef0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
8f00: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8f10: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8f30: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
8f40: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
8f50: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
8f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
8f70: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
8f80: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
8f90: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
8fa0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
8fb0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
8fc0: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
8fd0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
8fe0: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
8ff0: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
9000: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9010: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
9020: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
9030: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
9040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
9050: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
9060: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
9070: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
9080: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
9090: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
90a0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
90b0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
90c0: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
90d0: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
90e0: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
90f0: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
9100: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
9110: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
9120: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
9130: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9150: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
9160: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
9170: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
9180: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
9190: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
91a0: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
91b0: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
91c0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
91d0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
91e0: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
91f0: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
9200: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
9210: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
9220: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
9230: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
9240: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
9250: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
9260: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
9270: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
9280: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
9290: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
92a0: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
92b0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
92c0: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
92d0: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
92e0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
92f0: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
9300: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
9310: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
9320: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
9330: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
9340: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
9350: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
9360: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
9370: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
9380: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
9390: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
93a0: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
93b0: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
93c0: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
93d0: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
93e0: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
93f0: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
9400: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
9410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
9420: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
9430: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
9440: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9460: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
9470: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
9480: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
9490: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
94a0: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
94b0: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
94c0: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
94d0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
94e0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
94f0: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
9500: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
9510: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
9520: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
9530: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
9540: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
9550: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
9560: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
9570: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
9580: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
9590: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
95a0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
95b0: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
95c0: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
95d0: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
95e0: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
95f0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
9600: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
9610: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
9620: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
9630: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
9640: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
9650: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
9660: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
9670: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
9680: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
9690: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
96a0: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
96b0: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
96c0: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
96d0: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
96e0: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
96f0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
9700: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
9710: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
9720: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
9730: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
9740: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
9750: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
9760: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
9770: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
9780: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
9790: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
97a0: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
97b0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
97c0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
97d0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9800: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
9810: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
9820: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
9830: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
9840: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9850: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9860: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9890: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
98a0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
98b0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
98c0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
98d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
98e0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
98f0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
9900: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
9910: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
9920: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
9930: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
9940: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
9950: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
9960: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
9970: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
9980: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
9990: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
99a0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
99b0: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
99c0: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
99d0: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
99e0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
99f0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9a00: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a20: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
9a30: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
9a60: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
9a70: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
9a80: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
9a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
9aa0: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9ab0: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9ac0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9ae0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9af0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9b00: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9b10: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9b30: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
9b40: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
9b50: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
9b60: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
9b70: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
9b80: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
9b90: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
9ba0: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9bb0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9bc0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9bd0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9be0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9c00: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9c10: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
9c20: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
9c30: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9c50: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
9c60: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
9c70: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
9c80: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
9ca0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
9cb0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9cd0: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9ce0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9cf0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
9d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
9d10: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
9d20: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
9d30: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9d50: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9d60: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9d70: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9d80: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9da0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9db0: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9dc0: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9dd0: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9de0: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9df0: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
9e00: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
9e10: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
9e20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9e30: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
9e40: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
9e50: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9e60: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9e70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9e80: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9e90: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9ea0: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9eb0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9ec0: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9ed0: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9ee0: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9ef0: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
9f00: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
9f10: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
9f20: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
9f30: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
9f40: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
9f50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
9f60: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
9f70: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
9f80: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
9f90: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9fa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9fb0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9fc0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
9fd0: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
9fe0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
9ff0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
a000: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
a010: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
a020: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
a030: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
a040: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
a050: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
a060: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
a070: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
a080: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
a090: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
a0a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
a0b0: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
a0c0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
a0d0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
a0e0: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
a0f0: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
a100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
a110: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
a120: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a130: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a150: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
a160: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
a170: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
a180: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1a0: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
a1b0: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
a1c0: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
a1d0: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
a1e0: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
a1f0: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
a200: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
a210: 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54      u8 imposterT
a220: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a230: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
a240: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
a250: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
a260: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
a270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a280: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
a290: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
a2a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
a2b0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
a2c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a2d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a2e0: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
a2f0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
a300: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
a310: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a320: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a330: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
a340: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
a350: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
a360: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a370: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
a380: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
a390: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a3b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a3c0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
a3d0: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
a3e0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a400: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
a410: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
a420: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
a430: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
a440: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
a450: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
a460: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
a470: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
a480: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
a490: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
a4a0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
a4b0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a4e0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
a4f0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
a500: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
a510: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
a520: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
a530: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a540: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a560: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a570: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
a580: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a590: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a5b0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
a5c0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
a5d0: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
a5e0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
a5f0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
a600: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a610: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a620: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a640: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
a650: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
a660: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
a670: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
a680: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
a690: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a6a0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a6b0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
a6c0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
a6d0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
a6e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
a6f0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
a700: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
a710: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
a720: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
a730: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
a740: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
a750: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
a760: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
a770: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
a780: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
a790: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
a7a0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
a7b0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
a7c0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
a7d0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
a7e0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
a7f0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
a800: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
a810: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
a820: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
a830: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
a840: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
a850: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
a860: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
a870: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
a880: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
a890: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a8a0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
a8b0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
a8c0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
a8d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
a8e0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
a8f0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
a900: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
a910: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
a920: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
a930: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
a940: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
a950: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a960: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a970: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
a980: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
a990: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
a9a0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
a9b0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
a9c0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
a9d0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
a9e0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
a9f0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
aa00: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
aa10: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
aa20: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
aa30: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
aa40: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
aa50: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
aa60: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
aa70: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
aa80: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
aa90: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
aaa0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
aab0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
aac0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
aad0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
aae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
aaf0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
ab00: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
ab10: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ab30: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
ab40: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
ab50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
ab60: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
ab70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
ab80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
ab90: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
aba0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
abb0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
abc0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
abd0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
abe0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
abf0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
ac00: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
ac10: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
ac20: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
ac30: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
ac40: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
ac50: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
ac60: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
ac70: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
ac80: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
ac90: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
aca0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
acb0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
acc0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
acd0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
ace0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
acf0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
ad00: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ad10: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
ad20: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
ad30: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
ad40: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
ad50: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
ad60: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
ad80: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
ad90: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
ada0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
adb0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
adc0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
add0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
ade0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
adf0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
ae00: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
ae10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
ae20: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
ae30: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
ae40: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
ae50: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
ae60: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
ae70: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
ae80: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
ae90: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
aea0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
aeb0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
aec0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
aed0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
aee0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
aef0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
af00: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
af10: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
af20: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
af30: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
af40: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
af50: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
af60: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
af70: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
af80: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
af90: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
afa0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
afb0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
afc0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
afd0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
afe0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
aff0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
b000: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
b010: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
b020: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
b030: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
b040: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
b050: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
b060: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
b070: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
b080: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
b090: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
b0a0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
b0b0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
b0c0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
b0d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
b0e0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
b0f0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
b100: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
b110: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
b120: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
b130: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
b140: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
b150: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
b160: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
b170: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
b180: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
b190: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
b1a0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
b1b0: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
b1c0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
b1d0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
b1e0: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
b1f0: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
b200: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
b210: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
b220: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
b230: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
b240: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
b250: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b260: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b270: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
b280: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
b290: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
b2a0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
b2b0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
b2c0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
b2d0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
b2e0: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
b2f0: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
b300: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
b310: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
b320: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
b330: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
b340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
b350: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
b360: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
b370: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
b380: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b390: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b3a0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
b3b0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
b3c0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
b3d0: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
b3e0: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
b3f0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
b400: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
b410: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
b420: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
b430: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
b440: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
b450: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b460: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b470: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
b480: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
b490: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
b4a0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
b4b0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
b4c0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
b4d0: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
b4e0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
b4f0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
b500: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
b510: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
b520: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
b530: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
b540: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
b550: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
b560: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
b570: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
b580: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b590: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
b5a0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
b5b0: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
b5c0: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
b5d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5e0: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
b5f0: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
b600: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
b610: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
b620: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b630: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
b640: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65  00000004  /* Use
b650: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
b660: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
b670: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
b680: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
b690: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
b6a0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
b6b0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
b6c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
b6d0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
b6e0: 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0010  /* OK to s
b6f0: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
b700: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b710: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
b720: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
b730: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
b740: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
b750: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
b760: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
b770: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
b780: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
b790: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
b7a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
b7b0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
b7c0: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
b7d0: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
b7e0: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
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 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
b820: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
b830: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
b870: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
b880: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
b890: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
b8a0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
b8b0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
b8c0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
b8d0: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
b910: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
b920: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
b930: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
b940: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75  0000200  /* Debu
b950: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
b960: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
b970: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b980: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
b990: 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67  000400  /* Debug
b9a0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
b9b0: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
b9c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
b9d0: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
b9e0: 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  000800  /* OK to
b9f0: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
ba00: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
ba10: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
ba20: 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30  pTrace 0x0000100
ba30: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
ba40: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
ba50: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
ba60: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
ba70: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
ba80: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
ba90: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
baa0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
bab0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
bac0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30  mmitted 0x000400
bad0: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
bae0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
baf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
bb00: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
bb10: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
bb20: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
bb30: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
bb40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bb50: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
bb60: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e  00010000  /* Ign
bb70: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
bb80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bb90: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
bba0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
bbb0: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
bbc0: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
bbd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bbe0: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
bbf0: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0040000  /* Enab
bc00: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
bc10: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
bc20: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
bc30: 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30  eys    0x0008000
bc40: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
bc50: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
bc60: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
bc70: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
bc80: 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ex      0x001000
bc90: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
bca0: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
bcb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bcc0: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
bcd0: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
bce0: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
bcf0: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
bd00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
bd10: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
bd20: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
bd30: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
bd40: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bd50: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
bd60: 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20  er  0x00800000  
bd70: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
bd80: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
bd90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
bda0: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31  erFKs       0x01
bdb0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  000000  /* Defer
bdc0: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
bdd0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
bde0: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
bdf0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
be00: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
be10: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
be20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
be30: 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78  dbeEQP        0x
be40: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  04000000  /* Deb
be50: 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  ug EXPLAIN QUERY
be60: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
be70: 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20   SQLITE_Vacuum  
be80: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
be90: 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  0  /* Currently 
bea0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
beb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
bec0: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31  llSizeCk     0x1
bed0: 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0000000  /* Chec
bee0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
bef0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a  es on load */...
bf00: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
bf10: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
bf20: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
bf30: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
bf40: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
bf50: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
bf60: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
bf70: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
bf80: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
bf90: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
bfa0: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
bfb0: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
bfc0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
bfd0: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
bfe0: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
bff0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
c000: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
c010: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
c020: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
c030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c040: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
c050: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
c060: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
c070: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
c080: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
c090: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
c0a0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
c0b0: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
c0c0: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
c0d0: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
c0e0: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
c0f0: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
c100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
c110: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
c120: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
c130: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
c140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c150: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
c160: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
c170: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
c180: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c190: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
c1a0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
c1b0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
c1c0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
c1d0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
c1e0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
c1f0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
c200: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
c210: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
c220: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
c230: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
c240: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
c250: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
c270: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
c280: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
c290: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
c2a0: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
c2b0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
c2c0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
c2d0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
c2e0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
c2f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
c300: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
c310: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
c320: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
c330: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
c340: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
c350: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
c360: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
c370: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
c380: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c390: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
c3a0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
c3b0: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
c3c0: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
c3d0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
c3e0: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
c3f0: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
c400: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
c410: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
c420: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65  s&(mask))==0).#e
c430: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  lse.#define Opti
c440: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
c450: 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64  (db, mask)  0.#d
c460: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c470: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
c480: 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a  sk)   1.#endif..
c490: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
c4a0: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
c4b0: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
c4c0: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
c4d0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
c4e0: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
c4f0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
c500: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
c510: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
c520: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
c530: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
c540: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
c550: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
c560: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c570: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
c580: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
c590: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
c5a0: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
c5b0: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
c5c0: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
c5d0: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
c5e0: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
c5f0: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
c600: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c610: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
c620: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
c630: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
c640: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c650: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
c660: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
c670: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
c680: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c690: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
c6a0: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
c6b0: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
c6c0: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
c6d0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
c6e0: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
c6f0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
c700: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
c710: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c720: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
c730: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
c740: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
c750: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
c760: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c770: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
c780: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
c790: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
c7a0: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
c7b0: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
c7c0: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
c7d0: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
c7e0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
c7f0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
c800: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
c810: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
c820: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
c830: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
c840: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
c850: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
c860: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
c870: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
c880: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
c890: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
c8a0: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
c8b0: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
c8c0: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
c8d0: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
c8e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c8f0: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
c900: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
c910: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
c920: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
c930: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
c940: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
c950: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
c960: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
c970: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
c980: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
c990: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
c9a0: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
c9b0: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
c9c0: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
c9d0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
c9e0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
c9f0: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
ca00: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
ca10: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
ca20: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
ca30: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
ca40: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
ca50: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
ca60: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
ca70: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca90: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
caa0: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
cab0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
cac0: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
cad0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
cae0: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
caf0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
cb00: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
cb10: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
cb20: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
cb30: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
cb40: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
cb50: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
cb60: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
cb70: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
cb80: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
cb90: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
cba0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
cbb0: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
cbc0: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
cbd0: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
cbe0: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
cbf0: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
cc00: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
cc10: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
cc20: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
cc30: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
cc40: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
cc50: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
cc60: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
cc70: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
cc80: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
cc90: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
cca0: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
ccb0: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
ccc0: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
ccd0: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
cce0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
ccf0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
cd00: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
cd10: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
cd20: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
cd30: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
cd40: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
cd50: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
cd60: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
cd70: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
cd80: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
cd90: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
cda0: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
cdb0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
cdc0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
cdd0: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
cde0: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
cdf0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
ce00: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
ce10: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
ce20: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
ce30: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
ce40: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
ce50: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
ce60: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
ce70: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ce80: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
ce90: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
cea0: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
ceb0: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
cec0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ced0: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
cee0: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
cef0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
cf00: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
cf10: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
cf20: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
cf30: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
cf40: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
cf50: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
cf60: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
cf70: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
cf80: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
cf90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cfa0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
cfb0: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
cfc0: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
cfd0: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
cfe0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cff0: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
d000: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
d010: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
d020: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
d030: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d040: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
d050: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
d060: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
d070: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
d080: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
d090: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
d0a0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
d0b0: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
d0c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d0d0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
d0e0: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
d0f0: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
d100: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
d110: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d120: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
d130: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
d140: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
d150: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d160: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
d170: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
d180: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
d190: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d1a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
d1b0: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
d1c0: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
d1d0: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
d1e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d1f0: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
d200: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
d210: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
d220: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
d230: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
d240: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
d250: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
d260: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d270: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d280: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20  _CONSTANT 0x800 
d290: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d2a0: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d2b0: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d2c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d2d0: 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20  _MINMAX  0x1000 
d2e0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
d2f0: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
d300: 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  egates */../*.**
d310: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
d320: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
d330: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
d340: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
d350: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
d360: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
d370: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
d380: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
d390: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
d3a0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d3b0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d3c0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
d3d0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
d3e0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
d3f0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
d400: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
d410: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
d420: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
d430: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
d440: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
d450: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
d460: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
d470: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
d480: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
d490: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
d4a0: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
d4b0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d4c0: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
d4d0: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
d4e0: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
d4f0: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
d500: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d510: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
d520: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
d530: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d540: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d550: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
d560: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
d570: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
d580: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d590: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
d5a0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
d5b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d5c0: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
d5d0: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
d5e0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
d5f0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
d600: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
d610: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
d620: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
d630: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
d640: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
d650: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
d660: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
d670: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
d680: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
d690: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
d6a0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
d6b0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
d6c0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
d6d0: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
d6e0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
d6f0: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
d700: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
d710: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
d720: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
d730: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
d740: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
d750: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
d760: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
d770: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
d780: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
d790: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
d7a0: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
d7b0: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
d7c0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
d7d0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
d7e0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
d7f0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
d800: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
d810: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
d820: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
d830: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
d840: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
d850: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
d860: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d870: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d880: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
d890: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d8a0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d8b0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d8c0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d8d0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d8e0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d8f0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d900: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d910: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
d920: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d930: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d940: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
d950: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d960: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d970: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d980: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d990: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d9a0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d9b0: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
d9c0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d9d0: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
d9e0: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
d9f0: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
da00: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
da10: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
da20: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
da30: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
da40: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
da50: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
da60: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
da70: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
da80: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
da90: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
daa0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
dab0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
dac0: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
dad0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
dae0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
daf0: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
db00: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
db10: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
db20: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
db30: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
db40: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
db50: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
db60: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
db70: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
db80: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
db90: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
dba0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
dbb0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
dbc0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
dbd0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
dbe0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
dbf0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
dc00: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
dc10: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
dc20: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
dc30: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
dc40: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64  l,#zName,0,0}.#d
dc50: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
dc60: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dc70: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dc80: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
dc90: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
dca0: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
dcb0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
dcc0: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
dcd0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
dce0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
dcf0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
dd00: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
dd10: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
dd20: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
dd30: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
dd40: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
dd50: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
dd60: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
dd70: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
dd80: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
dd90: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
dda0: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
ddb0: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
ddc0: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
ddd0: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
dde0: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
ddf0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
de00: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
de10: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
de40: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
de50: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
de60: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
de90: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
dea0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
deb0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ded0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
dee0: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
def0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
df00: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
df10: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
df20: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
df30: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
df40: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
df50: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
df60: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
df70: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
df80: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
df90: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
dfa0: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
dfb0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
dfc0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
dfd0: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
dfe0: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
dff0: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
e000: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
e010: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
e020: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
e030: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
e040: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
e050: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
e060: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
e070: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e080: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
e090: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
e0a0: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
e0b0: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
e0c0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
e0d0: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
e0e0: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
e0f0: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
e100: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
e110: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e120: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
e130: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
e140: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
e150: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
e160: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
e190: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
e1a0: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
e1b0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
e1c0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
e1d0: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
e1e0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
e1f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
e200: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
e210: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
e220: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
e230: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
e240: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
e250: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
e260: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
e270: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
e280: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
e290: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
e2a0: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
e2b0: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
e2c0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
e2d0: 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *zDflt;     /* 
e2e0: 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
e2f0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
e300: 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  ue */.  char *zT
e310: 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61  ype;     /* Data
e320: 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63   type for this c
e330: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
e340: 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
e350: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e360: 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
e370: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
e380: 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
e390: 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
e3a0: 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
e3b0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
e3c0: 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
e3d0: 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
e3e0: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
e3f0: 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
e400: 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
e410: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
e420: 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63  d size of this c
e430: 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a  olumn.  INT==1 *
e440: 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
e450: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
e460: 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
e470: 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
e480: 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
e490: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e4a0: 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
e4b0: 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
e4c0: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
e4d0: 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
e4e0: 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
e4f0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
e500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
e510: 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
e520: 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
e530: 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
e540: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
e550: 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74  ./*.** A "Collat
e560: 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73  ing Sequence" is
e570: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
e580: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
e590: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
e5a0: 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61  cture. Conceptua
e5b0: 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67  lly, a collating
e5c0: 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73   sequence consis
e5d0: 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64  ts of a name and
e5e0: 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  .** a comparison
e5f0: 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65   routine that de
e600: 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  fines the order 
e610: 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65  of that sequence
e620: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53  ..**.** If CollS
e630: 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c  eq.xCmp is NULL,
e640: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
e650: 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  he.** collating 
e660: 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65  sequence is unde
e670: 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20  fined.  Indices 
e680: 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65  built on an unde
e690: 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69  fined.** collati
e6a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20  ng sequence may 
e6b0: 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77  not be read or w
e6c0: 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ritten..*/.struc
e6d0: 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68  t CollSeq {.  ch
e6e0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
e6f0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
e700: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
e710: 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63  uence, UTF-8 enc
e720: 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  oded */.  u8 enc
e730: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e740: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
e750: 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70   handled by xCmp
e760: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  () */.  void *pU
e770: 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ser;          /*
e780: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
e790: 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69  to xCmp() */.  i
e7a0: 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a  nt (*xCmp)(void*
e7b0: 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64  ,int, const void
e7c0: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
e7d0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78  id*);.  void (*x
e7e0: 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a  Del)(void*);  /*
e7f0: 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
e800: 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  pUser */.};../*.
e810: 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20  ** A sort order 
e820: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53  can be either AS
e830: 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64  C or DESC..*/.#d
e840: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
e850: 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20  ASC       0  /* 
e860: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
e870: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
e880: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53  ne SQLITE_SO_DES
e890: 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72  C      1  /* Sor
e8a0: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
e8b0: 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  rder */../*.** C
e8c0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
e8d0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
e8e0: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
e8f0: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
e900: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
e910: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
e920: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
e930: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
e940: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
e950: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
e960: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
e970: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
e980: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
e990: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
e9a0: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
e9b0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
e9c0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
e9d0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
e9e0: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
e9f0: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
ea00: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
ea10: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
ea20: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ea30: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
ea40: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
ea50: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
ea60: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ea70: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ea80: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
ea90: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
eaa0: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
eab0: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
eac0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
ead0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
eae0: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
eaf0: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
eb00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eb10: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
eb20: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
eb30: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
eb40: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
eb50: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
eb60: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
eb70: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
eb80: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
eb90: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
eba0: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
ebb0: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
ebc0: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
ebd0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
ebe0: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
ebf0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
ec00: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
ec10: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
ec20: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
ec30: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
ec40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec50: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
ec60: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
ec70: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
ec80: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
ec90: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
eca0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
ecb0: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
ecc0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
ecd0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
ece0: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
ecf0: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
ed00: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
ed10: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
ed20: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
ed30: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
ed40: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
ed50: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
ed60: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
ed70: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
ed80: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
ed90: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
eda0: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
edb0: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
edc0: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
edd0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ede0: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
edf0: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
ee00: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
ee10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
ee20: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
ee30: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
ee40: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
ee50: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
ee60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
ee70: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
ee80: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
ee90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eea0: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
eeb0: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
eec0: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
eed0: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
eee0: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
eef0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
ef00: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
ef10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
ef20: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
ef30: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
ef40: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
ef50: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
ef60: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
ef70: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
ef80: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
ef90: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
efa0: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
efb0: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
efc0: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
efd0: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
efe0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
eff0: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
f000: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
f010: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
f020: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
f030: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
f040: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
f050: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
f060: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f070: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f080: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f090: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f0a0: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f0b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f0c0: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f0d0: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f0e0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f0f0: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f100: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f110: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f120: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f130: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f140: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f150: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f160: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f170: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f180: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f190: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f1a0: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f1b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f1c0: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f1d0: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f1e0: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f1f0: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f200: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f210: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f220: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f230: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f240: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f250: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f260: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f270: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f280: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f290: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f2a0: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f2b0: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f2c0: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f2d0: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f2e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f2f0: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f300: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f310: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f320: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f330: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f340: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f350: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f360: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f370: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f380: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f390: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f3a0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f3b0: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f3c0: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f3d0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f3e0: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f3f0: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f400: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f410: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f420: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f430: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f440: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f450: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f460: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f470: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f480: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f490: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f4a0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f4b0: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f4c0: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f4d0: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f4e0: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f4f0: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f500: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f510: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
f520: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
f530: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
f540: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
f550: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
f560: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
f570: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f580: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
f590: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
f5a0: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
f5b0: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
f5c0: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
f5d0: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
f5e0: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
f5f0: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
f600: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
f610: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
f620: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
f630: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
f640: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
f650: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
f660: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
f670: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
f680: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
f690: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
f6a0: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
f6b0: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
f6c0: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
f6d0: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
f6e0: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
f6f0: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
f700: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
f710: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
f720: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
f730: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
f740: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
f750: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
f760: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
f770: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
f780: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
f790: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
f7a0: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
f7b0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
f7c0: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
f7d0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
f7e0: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
f7f0: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
f800: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
f810: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
f820: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
f830: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
f840: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
f850: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
f860: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
f870: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
f880: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
f890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f8a0: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
f8b0: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
f8c0: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
f8d0: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
f8e0: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
f8f0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
f900: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
f910: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
f920: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
f930: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
f940: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
f950: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f970: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
f980: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
f990: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
f9a0: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
f9b0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
f9c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
f9d0: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
f9e0: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
f9f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
fa00: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
fa10: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
fa20: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
fa30: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
fa40: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
fa50: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
fa60: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
fa70: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
fa80: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
fa90: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
faa0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
fab0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
fac0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
fad0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
fae0: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
faf0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
fb00: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
fb10: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
fb20: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
fb30: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
fb40: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
fb50: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
fb60: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
fb70: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
fb80: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
fb90: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
fba0: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
fbb0: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
fbc0: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
fbd0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
fbe0: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
fbf0: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
fc00: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
fc10: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
fc20: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
fc30: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
fc40: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
fc50: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
fc60: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
fc70: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66  ch column */.#if
fc80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fc90: 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73  _CHECK.  ExprLis
fca0: 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
fcb0: 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
fcc0: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
fcd0: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
fce0: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
fcf0: 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  BTree page for t
fd00: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  his table */.  i
fd10: 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
fd20: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
fd30: 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
fd40: 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
fd50: 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
fd60: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
fd70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
fd80: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
fd90: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fdb0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
fdc0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
fdd0: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
fde0: 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
fdf0: 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
fe00: 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
fe10: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
fe20: 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
fe30: 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
fe40: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
fe50: 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
fe60: 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
fe70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
fe80: 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
fe90: 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
fea0: 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
feb0: 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
fec0: 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
fed0: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
fee0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
fef0: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
ff00: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
ff10: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
ff20: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
ff30: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
ff40: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
ff50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ff60: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
ff70: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
ff80: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
ff90: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
ffa0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
ffb0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
ffc0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
ffd0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
ffe0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
fff0: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
10000 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
10010 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
10020 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
10030 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
10040 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
10050 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
10060 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
10070 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
10080 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
10090 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
100a0 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
100b0 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
100c0 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
100d0 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
100e0 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
100f0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10100 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
10110 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
10120 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
10130 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
10140 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
10150 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
10160 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
10170 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10180 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
10190 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69  ..**.** TF_OOOHi
101a0 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  dden applies to 
101b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
101c0 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20  hat have hidden 
101d0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
101e0 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  .** followed by 
101f0 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10200 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22  ns.  Example:  "
10210 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10220 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20  ABLE x USING.** 
10230 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20  vtab1(a HIDDEN, 
10240 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22  b);".  Since "b"
10250 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e   is a non-hidden
10260 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20   column but "a" 
10270 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68  is hidden,.** th
10280 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  e TF_OOOHidden a
10290 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61  ttribute would a
102a0 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73  pply in this cas
102b0 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20  e.  Such tables 
102c0 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69  require.** speci
102d0 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69  al handling duri
102e0 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73  ng INSERT proces
102f0 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  sing..*/.#define
10300 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
10310 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
10320 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
10330 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
10340 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
10350 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
10360 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
10370 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
10380 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
10390 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
103a0 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
103b0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
103c0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
103d0 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
103e0 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
103f0 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
10400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
10410 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
10420 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
10430 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
10440 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
10450 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
10460 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
10470 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
10480 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
10490 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
104a0 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a  owid  0x40    /*
104b0 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
104c0 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
104d0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
104e0 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
104f0 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
10500 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
10510 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  umns */.../*.** 
10520 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
10530 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
10540 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
10550 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
10560 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
10570 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
10580 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
10590 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
105a0 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
105b0 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
105c0 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
105d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
105e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
105f0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
10600 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
10610 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
10620 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
10630 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
10640 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
10650 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
10660 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
10670 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
10680 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
10690 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
106a0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
106b0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f   0.#endif../* Do
106c0 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
106d0 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
106e0 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
106f0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
10700 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
10710 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
10720 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
10730 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
10740 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
10750 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
10760 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
10770 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
10780 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
10790 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
107a0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
107b0 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
107c0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
107d0 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
107e0 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
107f0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
10800 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
10810 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10820 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
10830 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10840 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
10850 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
10860 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
10870 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
10880 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
10890 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
108a0 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
108b0 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
108c0 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
108d0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
108e0 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
108f0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
10900 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
10910 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
10920 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
10930 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
10940 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
10950 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
10960 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
10970 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
10980 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
10990 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
109a0 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
109b0 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
109c0 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
109d0 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
109e0 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
109f0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10a00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10a10 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
10a20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
10a30 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
10a40 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
10a50 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
10a60 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
10a70 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
10a80 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
10a90 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10aa0 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
10ab0 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
10ac0 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
10ad0 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
10ae0 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
10af0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
10b00 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
10b10 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
10b20 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
10b30 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
10b40 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
10b50 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
10b60 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
10b70 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
10b80 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
10b90 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
10ba0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
10bb0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10bc0 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
10bd0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
10be0 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
10bf0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
10c00 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
10c10 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
10c20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
10c30 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10c40 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
10c50 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
10c60 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
10c70 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
10c80 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
10c90 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
10ca0 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
10cb0 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
10cc0 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
10cd0 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
10ce0 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
10cf0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
10d00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10d10 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
10d20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
10d30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
10d40 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
10d50 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
10d60 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
10d70 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
10d80 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
10d90 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
10da0 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
10db0 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
10dc0 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
10dd0 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
10de0 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
10df0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
10e00 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
10e10 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
10e20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
10e30 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
10e40 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
10e50 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
10e60 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
10e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10e80 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
10e90 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
10ea0 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
10eb0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10ec0 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
10ed0 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
10ee0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
10ef0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
10f00 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
10f10 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
10f20 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
10f30 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
10f40 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
10f50 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
10f60 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
10f70 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
10f80 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
10f90 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
10fa0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10fb0 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
10fc0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10fd0 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
10fe0 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
10ff0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
11000 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
11010 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
11020 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
11030 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
11040 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
11050 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
11060 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
11070 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
11080 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
11090 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
110a0 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
110b0 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
110c0 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
110d0 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
110e0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
110f0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
11100 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
11110 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
11120 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
11130 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
11140 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
11150 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
11160 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
11170 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
11180 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
11190 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
111a0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
111b0 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
111c0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
111d0 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
111e0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
111f0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
11200 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
11210 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
11220 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
11230 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
11240 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
11250 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
11260 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
11270 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
11280 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
11290 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
112a0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
112b0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
112c0 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
112d0 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
112e0 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
112f0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
11300 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
11310 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
11320 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
11330 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
11340 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
11350 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
11360 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
11370 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
11380 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
11390 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
113a0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
113b0 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
113c0 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
113d0 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
113e0 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
113f0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
11400 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
11410 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
11420 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
11430 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
11440 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11450 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
11460 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
11470 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
11480 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
11490 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
114a0 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
114b0 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
114c0 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
114d0 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
114e0 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
114f0 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
11500 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
11510 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
11520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
11530 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
11540 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
11550 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
11560 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
11570 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
11580 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
11590 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
115a0 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
115b0 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
115c0 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
115d0 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
115e0 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
115f0 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
11600 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
11610 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
11620 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
11630 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
11640 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
11650 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
11660 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
11670 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
11680 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
11690 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
116a0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
116b0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
116c0 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
116d0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
116e0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
116f0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
11700 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
11710 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11720 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
11730 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
11740 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
11750 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
11760 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
11770 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
11780 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
11790 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
117a0 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
117b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
117c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
117d0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
117e0 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
117f0 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11800 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
11810 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
11820 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
11830 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
11840 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
11850 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
11860 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
11870 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
11880 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
11890 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
118a0 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
118b0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
118c0 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
118d0 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
118e0 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
118f0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
11900 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
11910 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
11920 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11930 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
11940 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
11950 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
11960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
11970 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
11980 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
11990 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
119a0 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
119b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
119c0 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
119d0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
119e0 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
119f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11a00 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
11a10 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
11a20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
11a30 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
11a40 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11a50 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
11a60 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
11a70 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
11a80 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
11a90 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
11aa0 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
11ab0 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
11ac0 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
11ad0 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
11ae0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11af0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11b00 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
11b10 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11b20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
11b30 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
11b40 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
11b50 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
11b60 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
11b70 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
11b80 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
11b90 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
11ba0 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
11bb0 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
11bc0 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
11bd0 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
11be0 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
11bf0 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
11c00 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
11c10 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
11c20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
11c30 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
11c40 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
11c50 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
11c60 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
11c70 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
11c80 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
11c90 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
11ca0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
11cb0 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
11cc0 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
11cd0 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
11ce0 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
11cf0 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
11d00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
11d10 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
11d20 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
11d30 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
11d40 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
11d50 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
11d60 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
11d70 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
11d80 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
11d90 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
11da0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
11db0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11dc0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
11dd0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
11de0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
11df0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11e00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11e10 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
11e20 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
11e30 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
11e40 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
11e50 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
11e60 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
11e70 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
11e80 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
11e90 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
11ea0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
11eb0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
11ec0 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
11ed0 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
11ee0 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
11ef0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
11f00 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
11f10 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11f30 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
11f40 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
11f50 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
11f60 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
11f70 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11f80 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
11f90 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11fa0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11fb0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
11fc0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
11fd0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
11fe0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
11ff0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
12000 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
12010 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
12020 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
12030 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
12040 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
12050 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
12060 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
12070 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
12080 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
12090 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
120a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
120b0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
120c0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
120d0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
120e0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
120f0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
12100 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
12110 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
12120 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
12130 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
12140 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
12150 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
12160 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
12170 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
12180 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
12190 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
121a0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
121b0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
121c0 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
121d0 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
121e0 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
121f0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
12200 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
12210 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
12220 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
12230 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
12240 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
12250 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
12260 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
12270 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
12280 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
12290 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
122a0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
122b0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
122c0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
122d0 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
122e0 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
122f0 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
12300 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
12310 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
12320 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
12330 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
12340 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
12350 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
12360 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
12370 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
12380 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
12390 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
123a0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
123b0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
123c0 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
123d0 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
123e0 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
123f0 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
12400 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
12410 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
12420 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
12430 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
12440 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
12450 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
12460 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
12470 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
12480 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
12490 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
124a0 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
124b0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
124c0 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
124d0 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
124e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
124f0 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
12500 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
12510 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
12520 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
12530 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
12540 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
12550 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
12560 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
12570 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
12580 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
12590 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
125a0 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
125b0 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
125c0 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
125d0 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
125e0 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
125f0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
12600 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
12610 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12630 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
12640 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
12650 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
12660 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
12670 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
12680 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
12690 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
126a0 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
126b0 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
126c0 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
126d0 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
126e0 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
126f0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
12700 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
12710 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
12720 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
12730 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
12740 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
12750 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
12760 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
12770 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
12780 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12790 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
127a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
127b0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
127c0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
127d0 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
127e0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
127f0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12800 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
12810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
12820 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
12830 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
12840 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
12850 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
12860 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
12870 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
12880 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
12890 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
128a0 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
128b0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
128c0 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
128d0 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ces */.  int tnu
128e0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
128f0 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
12900 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
12910 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12920 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b  LogEst szIdxRow;
12930 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
12940 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f  mated average ro
12950 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  w size in bytes 
12960 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c  */.  u16 nKeyCol
12970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12980 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12990 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b  ns forming the k
129a0 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c  ey */.  u16 nCol
129b0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
129c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
129d0 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20  lumns stored in 
129e0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
129f0 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
12a00 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
12a10 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
12a20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
12a30 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
12a40 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20  gned idxType:2; 
12a50 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55       /* 1==UNIQU
12a60 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
12a70 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
12a80 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
12a90 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
12aa0 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
12ab0 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
12ac0 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
12ad0 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
12ae0 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
12af0 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
12b00 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
12b10 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75  l columns */.  u
12b20 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65  nsigned isResize
12b30 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  d:1;    /* True 
12b40 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62  if resizeIndexOb
12b50 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20  ject() has been 
12b60 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69  called */.  unsi
12b70 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a  gned isCovering:
12b80 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
12b90 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69  this is a coveri
12ba0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e  ng index */.  un
12bb0 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61  signed noSkipSca
12bc0 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  n:1;   /* Do not
12bd0 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70   try to use skip
12be0 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f  -scan if true */
12bf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
12c00 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
12c10 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70  TAT4.  int nSamp
12c20 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
12c30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  /* Number of ele
12c40 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65  ments in aSample
12c50 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d  [] */.  int nSam
12c60 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  pleCol;         
12c70 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65   /* Size of Inde
12c80 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61  xSample.anEq[] a
12c90 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52  nd so on */.  tR
12ca0 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20  owcnt *aAvgEq;  
12cb0 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67         /* Averag
12cc0 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72  e nEq values for
12cd0 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61   keys not in aSa
12ce0 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53  mple */.  IndexS
12cf0 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20  ample *aSample; 
12d00 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66     /* Samples of
12d10 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
12d20 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ey */.  tRowcnt 
12d30 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
12d40 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
12d50 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66  mic stat1 data f
12d60 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
12d70 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
12d80 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  st0;        /* N
12d90 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e  on-logarithmic n
12da0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
12db0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65   the index */.#e
12dc0 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
12dd0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
12de0 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
12df0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12e00 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
12e10 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
12e20 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
12e30 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
12e40 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12e50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
12e60 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
12e70 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
12e80 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
12e90 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12ea0 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
12eb0 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
12ec0 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
12ed0 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  e */../* Return 
12ee0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
12ef0 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
12f00 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
12f10 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
12f20 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
12f30 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
12f40 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
12f50 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  )../* Return tru
12f60 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
12f70 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a  a UNIQUE index *
12f80 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71  /.#define IsUniq
12f90 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20  ueIndex(X)      
12fa0 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f  ((X)->onError!=O
12fb0 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45  E_None)../*.** E
12fc0 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
12fd0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
12fe0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
12ff0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
13000 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
13010 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
13020 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
13030 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
13040 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
13050 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
13060 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
13070 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
13080 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
13090 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
130a0 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
130b0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
130c0 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
130d0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
130e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
130f0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
13100 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
13110 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
13120 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
13130 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
13140 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
13150 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
13160 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
13170 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
13180 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
13190 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
131a0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
131b0 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
131c0 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
131d0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
131e0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
131f0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
13200 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
13210 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
13220 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
13230 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
13240 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
13250 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
13260 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
13270 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
13280 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
13290 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
132a0 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
132b0 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
132c0 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
132d0 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
132e0 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
132f0 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
13300 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
13310 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
13320 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
13330 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
13340 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
13350 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
13360 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
13370 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
13380 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
13390 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
133a0 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
133b0 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
133c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
133d0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
133e0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
133f0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
13400 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
13410 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
13420 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
13430 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
13440 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
13450 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
13460 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
13470 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
13480 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
13490 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
134a0 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
134b0 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
134c0 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
134d0 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
134e0 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
134f0 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
13500 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
13510 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
13520 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
13530 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
13540 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
13550 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
13560 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
13570 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
13580 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
13590 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
135a0 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
135b0 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
135c0 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
135d0 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
135e0 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
135f0 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
13600 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
13610 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
13620 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
13630 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
13640 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
13650 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
13660 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
13690 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
136a0 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
136b0 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
136c0 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
136d0 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
136e0 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
136f0 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
13700 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
13730 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
13740 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
13750 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
13760 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
13770 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
13780 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
13790 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
137a0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
137b0 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
137c0 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
137d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
137e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
137f0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
13800 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
13810 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
13820 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
13830 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
13840 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
13850 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
13860 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
13870 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
13880 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
13890 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
138a0 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
138b0 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
138c0 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
138d0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
138e0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
138f0 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
13900 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
13910 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
13920 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
13930 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
13940 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
13950 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
13960 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
13970 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
13980 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
13990 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
139a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
139b0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
139c0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
139d0 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
139e0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
139f0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
13a00 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
13a10 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
13a20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
13a30 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
13a40 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
13a50 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
13a60 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
13a70 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
13a80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13a90 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
13aa0 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
13ab0 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
13ac0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13ad0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
13ae0 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
13af0 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
13b20 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
13b30 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
13b40 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
13b70 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
13b80 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
13b90 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
13ba0 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
13bb0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
13bc0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
13bd0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
13be0 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
13bf0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
13c00 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
13c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13c20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13c30 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
13c40 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
13c50 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
13c60 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
13c70 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
13c80 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
13c90 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
13ca0 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
13cb0 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
13cc0 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
13cd0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
13ce0 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
13cf0 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
13d00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13d10 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
13d20 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
13d30 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
13d40 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
13d50 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
13d60 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
13d70 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
13d80 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
13d90 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
13da0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
13db0 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
13dc0 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
13dd0 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
13de0 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
13df0 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
13e00 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
13e10 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
13e20 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
13e30 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
13e40 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
13e50 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
13e60 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
13e70 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
13e80 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
13e90 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
13ea0 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
13eb0 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
13ec0 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
13ed0 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
13ee0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13ef0 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
13f00 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
13f10 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
13f20 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
13f30 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
13f40 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
13f50 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
13f60 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
13f70 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
13f80 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
13f90 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
13fa0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
13fb0 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
13fc0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
13fd0 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
13fe0 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
13ff0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
14000 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
14010 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
14020 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
14030 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
14040 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
14050 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
14060 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
14070 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
14080 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
14090 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
140a0 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
140b0 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
140c0 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
140d0 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
140e0 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
140f0 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
14100 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
14110 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
14120 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
14130 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
14140 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
14150 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
14160 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
14170 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
14180 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
14190 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
141a0 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
141b0 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
141c0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
141d0 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
141e0 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
141f0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
14200 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
14210 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
14220 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
14230 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
14240 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
14250 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
14260 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
14270 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
14280 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
14290 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
142a0 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
142b0 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
142c0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
142d0 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
142e0 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
142f0 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
14300 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
14310 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
14320 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
14330 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
14340 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
14350 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
14360 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
14370 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
14380 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
14390 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
143a0 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
143b0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
143c0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
143d0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
143e0 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
143f0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
14400 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
14410 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
14420 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
14430 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
14440 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
14450 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
14460 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
14470 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
14480 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
14490 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
144a0 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
144b0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
144c0 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
144d0 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
144e0 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
144f0 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
14500 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
14510 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
14520 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
14530 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
14540 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
14550 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
14560 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
14570 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
14580 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
14590 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
145a0 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
145b0 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
145c0 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
145d0 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
145e0 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
145f0 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
14600 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
14610 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
14620 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
14630 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
14640 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
14650 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
14660 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
14670 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
14680 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
14690 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
146a0 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
146b0 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
146c0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
146d0 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
146e0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
146f0 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
14700 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
14710 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
14720 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
14730 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
14740 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14750 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
14760 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
14770 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
14780 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
14790 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
147a0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
147b0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
147c0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
147d0 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
147e0 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
147f0 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
14800 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
14810 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
14820 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
14830 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
14840 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
14850 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
14860 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
14870 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
14880 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
14890 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
148a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
148b0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
148c0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
148d0 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
148e0 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
148f0 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
14900 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
14910 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
14920 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
14930 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
14940 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
14950 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
14960 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
14970 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
14980 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
14990 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
149a0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
149b0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
149c0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
149d0 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
149e0 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
149f0 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
14a00 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
14a10 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
14a20 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
14a30 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
14a40 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
14a50 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
14a60 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
14a70 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
14a80 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
14a90 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
14aa0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
14ab0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
14ac0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
14ad0 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
14ae0 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
14af0 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
14b00 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
14b10 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
14b20 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
14b30 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
14b40 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
14b50 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
14b60 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
14b70 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
14b80 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
14b90 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
14ba0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
14bb0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
14bc0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
14bd0 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
14be0 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
14bf0 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
14c00 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
14c10 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
14c20 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
14c30 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
14c40 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
14c50 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
14c60 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
14c70 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
14c80 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
14c90 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
14ca0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
14cb0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14cc0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
14cd0 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
14ce0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
14cf0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
14d00 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
14d10 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
14d20 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
14d30 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
14d40 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
14d50 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
14d60 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
14d70 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
14d80 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
14d90 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
14da0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
14db0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
14dc0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
14dd0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
14de0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
14df0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
14e00 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
14e10 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
14e20 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
14e30 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
14e40 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
14e50 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
14e60 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
14e70 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
14e80 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
14e90 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
14ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
14ee0 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
14ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
14f00 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
14f10 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
14f20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
14f30 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
14f40 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
14f50 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
14f60 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
14f70 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
14f80 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
14f90 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
14fa0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
14fb0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
14fc0 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
14fd0 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
14fe0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
14ff0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
15000 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
15010 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
15020 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
15030 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
15040 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
15050 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
15060 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
15070 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
15080 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
15090 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
150a0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
150b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150f0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
15100 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
15110 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
15120 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
15130 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
15140 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
15150 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
15160 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
15170 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
15180 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
15190 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
151a0 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
151d0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
151e0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
151f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
15200 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
15210 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
15240 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
15250 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
15260 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
15270 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
15280 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
15290 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
152a0 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
152d0 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
152e0 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
152f0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15310 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
15320 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
15330 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
15340 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
15350 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
15360 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
15370 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
15380 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
15390 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
153a0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
153b0 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
153c0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
153f0 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
15400 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
15410 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
15420 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
15430 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
15440 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
15450 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
15460 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
15470 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
15480 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
15490 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
154a0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
154b0 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
154c0 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
154d0 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
154e0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
154f0 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
15500 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
15510 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
15520 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
15530 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
15540 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
15550 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63  es in ON/USING c
15560 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a  lause of outer j
15570 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
15580 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
15590 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
155a0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
155b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
155c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
155d0 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30  esolved  0x00000
155e0 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65  4 /* IDs have be
155f0 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
15600 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
15610 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30  e EP_Error     0
15620 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65  x000008 /* Expre
15630 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
15640 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
15650 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
15660 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
15670 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
15680 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
15690 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
156a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
156b0 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
156c0 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
156d0 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
156e0 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
156f0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
15700 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
15710 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
15720 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
15730 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
15740 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
15750 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
15760 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
15770 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
15780 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
15790 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
157a0 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
157b0 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
157c0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
157d0 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
157e0 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
157f0 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
15800 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
15810 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
15820 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
15830 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
15840 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
15850 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
15860 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
15870 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
15880 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
15890 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
158a0 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
158b0 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
158c0 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
158d0 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
158e0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
158f0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
15900 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
15910 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
15920 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
15930 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
15940 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
15950 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
15960 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
15970 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
15980 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
15990 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
159a0 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
159b0 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
159c0 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
159d0 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
159e0 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
159f0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
15a00 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
15a10 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15a20 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
15a30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
15a40 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
15a50 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
15a60 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
15a70 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
15a80 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
15a90 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
15aa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
15ab0 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
15ac0 2a 20 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49  * Node is a SQLI
15ad0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
15ae0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
15af0 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
15b00 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
15b10 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
15b20 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
15b30 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
15b40 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
15b50 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
15b60 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
15b70 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
15b80 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69  ./*.** Combinati
15b90 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f  ons of two or mo
15ba0 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f  re EP_* flags.*/
15bb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
15bc0 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
15bd0 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f  e|EP_Subquery) /
15be0 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65 73  * Propagate thes
15bf0 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20 2a  e bits up tree *
15c00 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
15c10 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
15c20 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
15c30 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
15c40 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
15c50 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
15c60 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
15c70 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
15c80 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
15c90 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
15ca0 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
15cb0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
15cc0 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
15cd0 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
15ce0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
15cf0 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
15d00 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
15d10 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15d20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
15d30 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
15d40 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
15d50 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
15d60 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
15d70 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
15d80 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
15d90 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
15da0 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
15db0 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
15dc0 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
15dd0 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
15de0 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
15df0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
15e00 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
15e10 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
15e20 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
15e30 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
15e40 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
15e50 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
15e60 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
15e70 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
15e80 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
15e90 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
15ea0 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
15eb0 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
15ec0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15ed0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
15ee0 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
15ef0 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
15f00 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
15f10 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15f20 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
15f30 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
15f40 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
15f50 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
15f60 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
15f70 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
15f80 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
15f90 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
15fa0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
15fb0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
15fc0 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
15fd0 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
15fe0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
15ff0 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
16000 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
16010 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
16020 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
16030 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
16040 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
16050 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
16060 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
16070 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
16080 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
16090 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
160a0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
160b0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
160c0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
160d0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
160e0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
160f0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
16100 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
16110 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
16120 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
16130 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
16140 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
16150 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
16160 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
16170 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
16180 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
16190 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
161a0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
161b0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
161c0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
161d0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
161e0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
161f0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
16200 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
16210 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
16220 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
16230 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
16240 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
16250 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
16260 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
16270 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
16280 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
16290 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
162a0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
162b0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
162c0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
162d0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
162e0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
162f0 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
16300 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
16310 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
16320 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
16330 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
16340 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16350 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
16360 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
16370 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
16380 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
16390 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
163a0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
163b0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
163c0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
163d0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
163e0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
163f0 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
16400 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
16410 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
16420 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
16430 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
16440 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
16450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16460 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
16470 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
16480 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
16490 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
164a0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
164b0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
164c0 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
164d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
164e0 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
164f0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
16500 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
16510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
16520 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
16530 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
16540 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
16550 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
16560 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
16570 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
16580 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
16590 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
165a0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
165b0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
165c0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
165d0 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
165e0 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
165f0 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
16600 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
16610 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16620 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
16630 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
16640 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
16650 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
16660 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
16670 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
16680 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
16690 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
166a0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
166b0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
166c0 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
166d0 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
166e0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
166f0 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
16700 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
16710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
16720 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
16730 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
16740 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
16750 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
16760 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
16770 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
16780 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
16790 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
167a0 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
167c0 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
167d0 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
167e0 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
167f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16800 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16810 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
16820 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
16830 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
16840 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
16850 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
16860 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
16870 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
16880 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
16890 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
168a0 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
168b0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
168c0 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
168d0 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
168e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
168f0 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
16900 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
16910 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
16920 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
16930 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
16940 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
16950 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
16960 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
16970 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
16980 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
16990 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
169a0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
169b0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
169c0 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
169d0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
169e0 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
169f0 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
16a00 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
16a10 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
16a20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
16a30 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
16a40 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
16a50 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
16a60 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
16a70 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
16a80 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
16a90 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
16aa0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
16ab0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
16ac0 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
16ad0 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
16ae0 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
16af0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
16b00 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
16b10 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
16b20 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
16b30 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
16b40 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
16b50 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
16b60 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
16b70 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
16b80 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
16b90 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
16ba0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
16bb0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
16bc0 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
16bd0 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
16be0 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
16bf0 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
16c00 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
16c10 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
16c20 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
16c30 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
16c40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16c50 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
16c60 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
16c70 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
16c80 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
16c90 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
16ca0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
16cb0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
16cc0 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
16cd0 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
16ce0 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
16cf0 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
16d00 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
16d10 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
16d20 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
16d30 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
16d40 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
16d50 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
16d60 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
16d70 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
16d80 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
16d90 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
16da0 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
16db0 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
16dc0 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
16dd0 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
16de0 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
16df0 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
16e00 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d   A bit in a Bitm
16e10 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ask.*/.#define M
16e20 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42  ASKBIT(n)   (((B
16e30 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a  itmask)1)<<(n)).
16e40 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33  #define MASKBIT3
16e50 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64  2(n) (((unsigned
16e60 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f   int)1)<<(n))../
16e70 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
16e80 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
16e90 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
16ea0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
16eb0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
16ec0 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
16ed0 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
16ee0 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
16ef0 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
16f00 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
16f10 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
16f20 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
16f30 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
16f40 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
16f50 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
16f60 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
16f70 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
16f80 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
16f90 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
16fa0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
16fb0 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
16fc0 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
16fd0 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
16fe0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
16ff0 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
17000 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
17010 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
17020 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
17030 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
17040 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
17050 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
17060 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
17070 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
17080 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
17090 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
170a0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
170b0 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
170c0 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
170d0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
170e0 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
170f0 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
17100 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
17110 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
17120 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
17130 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
17140 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
17150 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
17160 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
17170 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
17180 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
17190 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
171a0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
171b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
171c0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
171d0 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
171e0 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
171f0 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
17200 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
17210 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
17220 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
17230 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
17240 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
17250 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
17260 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
17270 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
17280 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
17290 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
172a0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
172b0 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
172c0 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
172d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
172e0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
172f0 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
17300 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
17310 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
17320 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
17330 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
17340 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
17350 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
17360 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
17370 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
17380 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
17390 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
173a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
173b0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
173c0 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
173d0 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
173e0 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
173f0 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
17400 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
17410 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
17420 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
17430 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
17440 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
17450 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
17460 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
17470 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
17480 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
17490 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
174a0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
174b0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
174c0 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
174d0 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
174e0 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
174f0 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
17500 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
17510 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
17520 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
17530 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
17540 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
17550 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
17560 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
17570 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69  ne */.    u8 joi
17580 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
17590 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
175a0 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e  een this able an
175b0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
175c0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e  /.    unsigned n
175d0 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
175e0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
175f0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
17600 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
17610 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
17620 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
17630 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
17640 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
17650 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76  /.    unsigned v
17660 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
17670 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
17680 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
17690 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
176a0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
176b0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
176c0 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
176d0 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66  e in WITH */.#if
176e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
176f0 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20  _EXPLAIN.    u8 
17700 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f  iSelectId;     /
17710 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c  * If pSelect!=0,
17720 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73   the id of the s
17730 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50  ub-select in EQP
17740 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69   */.#endif.    i
17750 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
17760 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
17770 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
17780 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
17790 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
177a0 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
177b0 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
177c0 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
177d0 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
177e0 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
177f0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
17800 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
17810 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
17820 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
17830 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
17840 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
17850 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
17860 3b 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20  ; /* Identifier 
17870 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
17880 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
17890 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  e */.    Index *
178a0 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e  pIndex;    /* In
178b0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
178c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
178d0 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f  Index, if any */
178e0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
178f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
17900 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
17910 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
17920 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
17930 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
17940 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
17950 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
17960 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
17970 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
17980 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
17990 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
179a0 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
179b0 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
179c0 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
179d0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
179e0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
179f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
17a00 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
17a10 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
17a20 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
17a30 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
17a40 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
17a50 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
17a60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
17a70 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
17a80 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
17a90 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
17aa0 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
17ab0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
17ac0 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
17ad0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
17ae0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
17af0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
17b00 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
17b10 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
17b20 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
17b30 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
17b40 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
17b50 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
17b60 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
17b70 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
17b80 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
17b90 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
17ba0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17bb0 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
17bc0 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
17bd0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
17be0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
17bf0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
17c00 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
17c10 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
17c20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
17c30 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
17c40 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
17c50 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
17c60 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
17c70 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
17c80 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
17c90 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
17ca0 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
17cb0 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
17cc0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
17cd0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
17ce0 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
17cf0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
17d00 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
17d10 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
17d20 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
17d30 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
17d40 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
17d50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
17d60 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
17d70 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
17d80 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
17d90 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
17da0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17db0 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
17dc0 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
17dd0 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
17de0 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
17df0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e  .#define WHERE_N
17e00 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20  O_AUTOINDEX     
17e10 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c  0x0080 /* Disall
17e20 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  ow automatic ind
17e30 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
17e40 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
17e50 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
17e60 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
17e70 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
17e80 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17e90 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
17ea0 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
17eb0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
17ec0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
17ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17ee0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
17ef0 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
17f00 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
17f10 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
17f20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
17f30 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
17f40 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
17f50 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
17f60 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
17f70 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
17f80 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
17f90 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
17fa0 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f  _ReopenIdx */../
17fb0 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
17fc0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
17fd0 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
17fe0 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
17ff0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
18000 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
18010 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
18020 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
18030 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
18040 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
18050 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
18060 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
18070 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
18080 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
18090 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
180a0 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
180b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
180c0 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
180d0 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
180e0 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
180f0 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
18100 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
18110 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
18120 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
18130 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
18140 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
18150 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
18160 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
18170 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
18180 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
18190 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
181a0 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
181b0 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
181c0 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
181d0 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
181e0 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
181f0 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
18200 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
18210 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
18220 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
18230 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
18240 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
18250 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
18260 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
18270 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
18280 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
18290 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
182a0 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
182b0 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
182c0 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
182d0 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
182e0 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
182f0 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74  er-most .** cont
18300 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
18310 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
18320 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
18330 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
18340 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
18350 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
18360 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
18370 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
18380 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
18390 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
183a0 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
183b0 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
183c0 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
183d0 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
183e0 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
183f0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
18400 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
18410 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
18420 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
18430 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
18440 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ed. .**.** Each 
18450 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
18460 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
18470 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
18480 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
18490 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
184a0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
184b0 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
184c0 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
184d0 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
184e0 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
184f0 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
18500 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
18510 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
18520 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
18530 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
18540 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
18550 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
18560 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
18570 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
18580 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
18590 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
185a0 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
185b0 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
185c0 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
185d0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
185e0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
185f0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
18600 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
18610 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
18620 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
18630 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
18640 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
18650 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
18660 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
18670 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
18680 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
18690 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
186a0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
186b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
186c0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
186d0 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
186e0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
186f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18700 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
18710 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
18720 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
18730 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
18740 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
18750 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
18760 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
18770 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
18780 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
18790 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
187a0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
187b0 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f  **.** Note:  NC_
187c0 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68  MinMaxAgg must h
187d0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
187e0 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41  ue as SF_MinMaxA
187f0 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  gg and.** SQLITE
18800 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a  _FUNC_MINMAX..**
18810 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f   .*/.#define NC_
18820 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31  AllowAgg  0x0001
18830 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
18840 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
18850 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
18860 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
18870 20 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65    0x0002  /* One
18880 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
18890 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
188a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
188b0 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34  IsCheck   0x0004
188c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
188d0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
188e0 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
188f0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
18900 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30  _InAggFunc 0x000
18910 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e  8  /* True if an
18920 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
18930 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
18940 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
18950 61 72 74 49 64 78 20 20 20 30 78 30 30 31 30 20  artIdx   0x0010 
18960 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
18970 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
18980 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23  index WHERE */.#
18990 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78  define NC_MinMax
189a0 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d  Agg 0x1000  /* m
189b0 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65  in/max aggregate
189c0 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74  s seen.  See not
189d0 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a  e above */../*.*
189e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
189f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
18a00 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
18a10 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
18a20 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
18a30 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
18a40 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
18a50 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
18a60 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
18a70 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
18a80 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
18a90 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
18aa0 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
18ab0 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
18ac0 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
18ad0 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
18ae0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
18af0 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
18b00 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
18b10 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
18b20 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
18b30 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
18b40 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
18b50 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
18b60 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
18b70 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
18b80 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
18b90 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
18ba0 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
18bb0 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
18bc0 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
18bd0 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
18be0 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
18bf0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
18c00 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
18c10 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
18c20 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
18c30 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
18c40 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
18c50 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
18c60 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
18c70 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
18c80 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
18c90 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
18ca0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
18cb0 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
18cc0 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
18cd0 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
18ce0 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
18cf0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
18d00 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
18d10 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
18d20 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
18d30 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
18d40 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
18d50 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
18d60 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
18d70 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
18d80 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
18d90 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
18da0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
18db0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
18dc0 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
18dd0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
18de0 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
18df0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
18e00 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
18e10 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
18e20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
18e30 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
18e40 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
18e50 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18e70 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
18e80 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
18e90 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
18ea0 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61   */.  u16 selFla
18eb0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
18ec0 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
18ed0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
18ee0 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
18ef0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
18f00 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
18f10 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
18f20 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ers */.#if SELEC
18f30 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
18f40 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31   char zSelName[1
18f50 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f  2];     /* Symbo
18f60 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73  lic name of this
18f70 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20   SELECT use for 
18f80 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e  debugging */.#en
18f90 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70  dif.  int addrOp
18fa0 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
18fb0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
18fc0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
18fd0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
18fe0 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b   u64 nSelectRow;
18ff0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
19000 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
19010 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20  esult rows */.  
19020 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
19030 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
19040 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
19050 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
19060 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
19070 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
19080 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
19090 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
190a0 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
190b0 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
190c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
190d0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
190e0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
190f0 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
19100 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19110 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
19120 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
19130 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
19140 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
19150 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
19160 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
19170 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
19180 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
19190 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
191a0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
191b0 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
191c0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
191d0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
191e0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
191f0 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
19200 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
19210 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
19220 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
19230 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
19240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
19250 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
19260 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
19270 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
19280 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
19290 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
192a0 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
192b0 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
192c0 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
192d0 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65  ct Flag"..*/.#de
192e0 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
192f0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
19300 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
19310 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
19320 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
19330 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
19340 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
19350 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
19360 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
19370 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
19380 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
19390 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
193a0 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
193b0 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
193c0 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20       0x0008  /* 
193d0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
193e0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
193f0 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
19400 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 31  phemeral   0x001
19410 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
19420 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
19430 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
19440 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
19450 20 20 30 78 30 30 32 30 20 20 2f 2a 20 73 71 6c    0x0020  /* sql
19460 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
19470 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
19480 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
19490 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
194a0 30 78 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0040  /* FROM 
194b0 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
194c0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
194d0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
194e0 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78 30  pound        0x0
194f0 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  080  /* Part of 
19500 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
19510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
19520 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
19530 78 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0100  /* Synthe
19540 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
19550 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
19560 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
19570 65 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  e      0x0200  /
19580 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
19590 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
195a0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
195b0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
195c0 20 20 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a        0x0400  /*
195d0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
195e0 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
195f0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
19600 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
19610 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 4e 65     0x0800  /* Ne
19620 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
19630 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
19640 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
19650 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
19660 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67     0x1000  /* Ag
19670 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
19680 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
19690 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
196a0 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20  Recursive       
196b0 30 78 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  0x2000  /* The r
196c0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
196d0 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
196e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
196f0 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 20 30  onverted       0
19700 78 34 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e  x4000  /* By con
19710 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
19720 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
19730 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
19740 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
19750 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
19760 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
19770 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
19780 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
19790 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
197a0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
197b0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
197c0 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
197d0 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
197e0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
197f0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
19800 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
19810 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20  rary index .**  
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
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 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
19870 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
19880 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
19890 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
198a0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
198b0 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
198c0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
198d0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
198e0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
198f0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
19900 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
19910 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
19920 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
19930 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
19940 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
19950 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
19960 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
19980 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
19990 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
199a0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
199d0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
199e0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
199f0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
19a00 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
19a10 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
19a20 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
19a30 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
19a40 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
19a50 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
19a60 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
19a70 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
19a80 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
19a90 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
19aa0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
19ac0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
19ad0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
19ae0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
19af0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
19b00 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
19b10 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
19b20 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
19b50 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
19b60 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
19b70 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19b80 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
19b90 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
19ba0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
19bb0 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
19be0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
19bf0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
19c00 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19c10 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
19c20 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
19c30 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
19c40 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
19c70 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
19c80 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19c90 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20  Parm. .**       
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
19cb0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
19cc0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
19cd0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
19ce0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19cf0 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
19d00 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
19d10 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
19d20 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
19d30 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
19d40 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
19d50 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
19d60 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
19d70 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19d80 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
19d90 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
19da0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
19db0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
19de0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
19df0 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
19e00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19e10 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
19e20 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
19e30 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
19e40 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19e60 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
19e70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
19e80 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
19e90 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
19ea0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
19eb0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
19ee0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
19ef0 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
19f00 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19f10 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
19f20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
19f30 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
19f40 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
19f50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19f60 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
19f70 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
19f80 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
19f90 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
19fc0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
19fd0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
19fe0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
19ff0 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1a000 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1a010 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1a020 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1a030 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1a040 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1a050 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1a060 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1a070 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1a080 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1a090 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1a0a0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1a0c0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1a0d0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1a0e0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1a110 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1a120 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1a130 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1a140 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1a150 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1a160 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1a180 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1a190 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1a1a0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1a1b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a1c0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1a1d0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1a1e0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1a1f0 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a210 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1a220 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1a230 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1a240 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1a250 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1a260 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1a270 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1a280 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1a2b0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1a2c0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1a2d0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1a300 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1a310 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1a320 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1a330 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1a340 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1a350 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a360 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1a370 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1a380 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1a390 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1a3c0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1a3d0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1a3e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1a3f0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1a400 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1a410 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1a420 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1a430 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1a440 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1a450 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1a460 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1a470 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1a480 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1a490 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1a4a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1a4b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1a4c0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1a4d0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1a4e0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1a4f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1a500 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1a510 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1a520 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1a530 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1a540 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1a550 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1a560 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1a570 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1a580 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1a590 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1a5a0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1a5b0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1a5c0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1a5d0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1a5e0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1a5f0 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1a600 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1a610 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1a620 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1a630 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1a640 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1a650 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1a660 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1a670 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1a680 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1a690 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1a6a0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1a6b0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1a6c0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1a6d0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1a6e0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1a6f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1a700 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1a710 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1a720 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1a730 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1a740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a750 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1a760 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1a770 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1a780 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1a790 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a7a0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1a7b0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1a7c0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1a7d0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1a7e0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1a7f0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a800 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1a810 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1a820 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1a830 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1a840 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1a850 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1a860 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1a870 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1a880 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1a890 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1a8a0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1a8b0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1a8c0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1a8d0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1a8e0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1a8f0 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
1a900 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1a910 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1a920 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
1a930 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1a940 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1a950 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1a960 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1a970 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1a980 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1a990 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1a9a0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1a9b0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1a9c0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1a9d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a9e0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1a9f0 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
1aa00 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1aa10 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1aa20 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1aa30 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1aa40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1aa50 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1aa60 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1aa70 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1aa80 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1aa90 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  NT .** tables, t
1aaa0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1aab0 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1aac0 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1aad0 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1aae0 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1aaf0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1ab00 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1ab10 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1ab20 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1ab30 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1ab40 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1ab50 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1ab60 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1ab70 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1ab80 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1ab90 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74  re down within t
1aba0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1abb0 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1abc0 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1abd0 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1abe0 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1abf0 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1ac00 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1ac10 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1ac20 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1ac30 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1ac40 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1ac50 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1ac60 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1ac70 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1ac80 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1ac90 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1aca0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1acb0 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1acc0 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1acd0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1ace0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1acf0 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1ad00 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1ad10 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1ad20 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1ad30 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1ad40 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1ad50 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1ad60 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1ad70 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
1ad80 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
1ad90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
1ada0 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
1adb0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1adc0 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
1add0 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
1ade0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1adf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1ae00 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
1ae10 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69  for each .** tri
1ae20 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
1ae30 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
1ae40 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
1ae50 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1ae60 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
1ae70 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
1ae80 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
1ae90 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
1aea0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
1aeb0 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
1aec0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
1aed0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
1aee0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
1aef0 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
1af00 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
1af10 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
1af20 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
1af30 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1af40 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
1af50 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
1af60 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
1af70 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
1af80 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
1af90 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
1afa0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
1afb0 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
1afc0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
1afd0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
1afe0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
1aff0 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
1b000 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
1b010 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
1b020 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
1b030 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
1b040 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
1b050 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
1b060 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1b070 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
1b080 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
1b090 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
1b0a0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
1b0b0 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
1b0c0 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73   of INSERT .** s
1b0d0 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
1b0e0 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
1b0f0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
1b100 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1b110 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
1b120 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
1b130 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
1b140 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
1b150 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
1b160 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
1b170 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
1b180 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
1b190 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
1b1a0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
1b1b0 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
1b1c0 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
1b1d0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1b1e0 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
1b1f0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
1b200 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
1b210 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
1b220 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
1b230 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1b240 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
1b250 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
1b260 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
1b270 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
1b280 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
1b290 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
1b2a0 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
1b2b0 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
1b2c0 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
1b2d0 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
1b2e0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
1b2f0 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
1b300 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1b310 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e  >30.  typedef un
1b320 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d  signed char yDbM
1b330 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f  ask[(SQLITE_MAX_
1b340 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a  ATTACHED+9)/8];.
1b350 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1b360 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1b370 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49  )[(I)/8]&(1<<((I
1b380 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66  )&7)))!=0).# def
1b390 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1b3a0 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d  )      memset((M
1b3b0 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23  ),0,sizeof(M)).#
1b3c0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1b3d0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28  t(M,I)     (M)[(
1b3e0 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26  I)/8]|=(1<<((I)&
1b3f0 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  7)).# define DbM
1b400 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1b410 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1b420 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65  Zero(M).# define
1b430 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1b440 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61  )   (sqlite3DbMa
1b450 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29  skAllZero(M)==0)
1b460 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
1b470 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
1b480 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20  bMask;.# define 
1b490 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1b4a0 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d     (((M)&(((yDbM
1b4b0 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30  ask)1)<<(I)))!=0
1b4c0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b4d0 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d  kZero(M)      (M
1b4e0 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  )=0.# define DbM
1b4f0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1b500 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29  (M)|=(((yDbMask)
1b510 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e  1)<<(I)).# defin
1b520 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1b530 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65  M)   (M)==0.# de
1b540 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1b550 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23  ro(M)   (M)!=0.#
1b560 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1b570 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
1b580 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
1b590 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1b5a0 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
1b5b0 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
1b5c0 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
1b5d0 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
1b5e0 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
1b5f0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
1b600 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
1b610 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
1b620 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
1b630 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
1b640 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
1b650 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
1b660 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
1b670 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
1b680 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
1b690 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
1b6a0 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
1b6b0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
1b6c0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
1b6d0 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
1b6e0 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
1b6f0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
1b700 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
1b710 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1b720 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
1b730 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
1b740 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
1b750 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
1b760 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
1b770 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  he .** feature i
1b780 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
1b790 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
1b7a0 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
1b7b0 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
1b7c0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b7d0 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
1b7e0 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
1b7f0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
1b800 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
1b810 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
1b820 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
1b830 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
1b840 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
1b850 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
1b860 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
1b870 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1b880 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
1b890 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1b8a0 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
1b8b0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
1b8c0 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
1b8d0 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
1b8e0 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
1b8f0 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
1b900 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
1b910 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
1b920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1b930 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1b940 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
1b950 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
1b960 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
1b970 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
1b980 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
1b990 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
1b9a0 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
1b9b0 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
1b9c0 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
1b9d0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1b9e0 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
1b9f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ba00 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
1ba10 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
1ba20 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
1ba30 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
1ba40 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
1ba50 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
1ba60 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
1ba70 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
1ba80 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
1ba90 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1baa0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
1bab0 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
1bac0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
1bad0 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
1bae0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1baf0 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
1bb00 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
1bb10 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
1bb20 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
1bb30 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
1bb40 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1bb50 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1bb60 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
1bb70 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
1bb80 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
1bb90 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
1bba0 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
1bbb0 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
1bbc0 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
1bbd0 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
1bbe0 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
1bbf0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1bc00 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
1bc10 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1bc20 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
1bc30 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
1bc40 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
1bc50 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1bc60 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1bc70 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
1bc80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
1bc90 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
1bca0 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
1bcb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bcc0 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
1bcd0 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
1bce0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
1bcf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bd00 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
1bd10 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
1bd20 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74  ar */.  int nSet
1bd30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bd40 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75  Number of sets u
1bd50 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1bd60 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20  int nOnce;      
1bd70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bd80 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75  f OP_Once instru
1bd90 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f  ctions so far */
1bda0 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b  .  int nOpAlloc;
1bdb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bdc0 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
1bdd0 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1bde0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69  p[] */.  int iFi
1bdf0 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a  xedOp;        /*
1be00 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20   Never back out 
1be10 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70  opcodes iFixedOp
1be20 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f  -1 or earlier */
1be30 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
1be40 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1be50 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
1be60 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
1be70 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
1be80 6e 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20  nt iPartIdxTab; 
1be90 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72      /* Table cor
1bea0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20  responding to a 
1beb0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f  partial index */
1bec0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1bed0 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1bee0 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1bef0 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1bf00 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1bf10 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1bf20 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1bf30 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1bf40 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1bf50 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1bf60 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1bf70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bf80 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1bf90 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1bfa0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1bfb0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1bfc0 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  bels */.  struct
1bfd0 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
1bfe0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
1bff0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1c000 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
1c010 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
1c020 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1c030 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
1c040 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
1c050 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
1c060 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
1c070 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
1c080 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
1c090 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
1c0a0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
1c0b0 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
1c0c0 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1c0e0 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
1c0f0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
1c100 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
1c110 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
1c120 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
1c130 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
1c140 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
1c150 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
1c160 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
1c170 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
1c180 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
1c190 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
1c1a0 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c  entry */.  ExprL
1c1b0 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b  ist *pConstExpr;
1c1c0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1c1d0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b  essions */.  Tok
1c1e0 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
1c1f0 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
1c200 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
1c210 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
1c220 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ed */.  yDbMask 
1c230 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
1c240 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
1c250 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
1c260 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
1c270 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
1c280 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
1c290 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
1c2a0 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
1c2b0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
1c2c0 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
1c2d0 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
1c2e0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
1c2f0 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
1c300 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
1c310 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1c320 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
1c330 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
1c340 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
1c350 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
1c360 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1c370 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
1c380 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
1c390 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
1c3a0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
1c3b0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
1c3c0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
1c3d0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
1c3e0 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  m */.#if SELECTT
1c3f0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69  RACE_ENABLED.  i
1c400 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
1c410 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c420 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1c430 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  ts seen */.  int
1c440 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20   nSelectIndent; 
1c450 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20    /* How far to 
1c460 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41  indent SELECTTRA
1c470 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23  CE() output */.#
1c480 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1c490 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
1c4a0 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
1c4b0 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
1c4c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
1c4d0 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
1c4e0 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
1c4f0 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
1c500 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
1c510 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
1c520 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
1c530 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
1c540 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
1c550 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1c560 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
1c570 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
1c580 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
1c590 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
1c5a0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1c5b0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1c5c0 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1c5d0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1c5e0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1c5f0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1c600 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1c610 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1c620 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1c630 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1c640 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1c650 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1c660 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1c670 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1c680 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1c690 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1c6a0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1c6b0 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1c6c0 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1c6d0 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1c6e0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1c6f0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1c700 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1c710 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1c720 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1c730 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1c740 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1c750 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1c760 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1c770 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1c780 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1c790 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1c7a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1c7b0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1c7c0 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1c7d0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1c7e0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1c7f0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1c800 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1c810 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1c820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1c860 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1c870 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1c880 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1c890 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1c8a0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1c8b0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1c8c0 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1c8d0 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1c8e0 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1c8f0 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1c900 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1c910 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1c920 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1c930 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1c940 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1c950 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1c960 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1c970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c9a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1c9b0 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1c9c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c9d0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1c9e0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1c9f0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1ca00 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1ca10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ca20 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1ca30 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1ca40 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1ca50 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1ca60 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1ca70 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1ca80 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1ca90 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1caa0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1cab0 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1cac0 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1cad0 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1cae0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1caf0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1cb00 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1cb10 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1cb20 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1cb30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1cb40 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1cb50 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1cb60 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1cb70 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1cb80 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1cb90 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1cbb0 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1cbc0 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1cbd0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1cbe0 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1cbf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cc00 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1cc10 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1cc20 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cc40 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1cc50 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1cc60 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1cc70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1cc80 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1cc90 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1cca0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1ccb0 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1ccc0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1ccd0 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1cce0 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1ccf0 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1cd00 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1cd10 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1cd20 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1cd30 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1cd40 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1cd50 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1cd60 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1cd70 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1cd80 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1cd90 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1cda0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1cdb0 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1cdc0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1cdd0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1cde0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1cdf0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1ce00 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1ce10 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1ce20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1ce30 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1ce40 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1ce50 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1ce60 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1ce70 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1ce80 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1ce90 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1cea0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1ceb0 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1cec0 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1ced0 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1cee0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1cef0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1cf00 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1cf10 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1cf20 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1cf30 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1cf40 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1cf50 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1cf60 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1cf70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1cf80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1cf90 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1cfb0 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1cfc0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1cfd0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1cfe0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1cff0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1d000 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1d010 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1d020 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1d030 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1d040 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1d050 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1d060 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1d070 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1d080 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1d090 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1d0a0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1d0b0 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1d0c0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1d0d0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1d0e0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1d0f0 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1d100 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1d110 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1d120 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1d130 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1d140 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1d150 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1d160 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1d170 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1d180 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1d190 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1d1a0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1d1b0 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1d1c0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1d1d0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1d1e0 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1d1f0 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1d200 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1d210 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1d220 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1d230 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1d240 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1d250 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1d260 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1d270 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1d280 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1d290 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1d2a0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1d2b0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1d2c0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1d2d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1d2e0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1d2f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1d300 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1d310 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1d320 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
1d330 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61  Note that the va
1d340 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50 20  lues for ISNOOP 
1d350 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20 61 72  and LENGTHARG ar
1d360 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42 75 74  e the same.  But
1d370 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62 69   as .** those bi
1d380 74 73 20 61 72 65 20 6e 65 76 65 72 20 75 73 65  ts are never use
1d390 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f 70  d on the same op
1d3a0 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72 6c 61  code, the overla
1d3b0 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a 2a  p is harmless..*
1d3c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d3d0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
1d3e0 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
1d3f0 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
1d400 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
1d410 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
1d420 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1d430 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
1d440 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
1d450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d460 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
1d470 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
1d480 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
1d490 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
1d4a0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
1d4b0 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
1d4c0 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
1d4d0 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
1d4e0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
1d4f0 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
1d500 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
1d510 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
1d520 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
1d530 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
1d540 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
1d550 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
1d560 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
1d570 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
1d580 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1d590 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
1d5a0 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
1d5b0 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
1d5c0 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
1d5d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1d5e0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1d5f0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1d600 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1d610 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1d620 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1d630 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1d640 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1d650 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1d660 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1d670 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1d680 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1d690 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1d6a0 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1d6b0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1d6c0 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
1d6d0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
1d6e0 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
1d6f0 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
1d700 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d710 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
1d720 30 78 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x04    /* P2 to
1d730 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
1d740 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
1d750 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d760 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
1d770 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1d780 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
1d790 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
1d7a0 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1d7b0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1d7c0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1d7d0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1d7e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1d7f0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1d800 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
1d810 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
1d820 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
1d830 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
1d840 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
1d850 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
1d860 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
1d870 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
1d880 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
1d890 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
1d8a0 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1d8b0 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1d8c0 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1d8d0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1d8e0 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1d8f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1d900 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1d910 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1d920 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1d930 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1d940 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1d950 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1d960 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1d970 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1d980 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1d990 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1d9a0 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1d9b0 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1d9c0 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1d9d0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1d9e0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1d9f0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1da00 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1da10 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1da20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1da30 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1da40 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1da50 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1da60 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1da70 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1da80 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1da90 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1daa0 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1dad0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1dae0 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1daf0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1db00 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1db10 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1db30 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1db40 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1db50 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1db60 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1db80 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1db90 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1dba0 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1dbb0 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1dbc0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1dbd0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1dbe0 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1dbf0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1dc00 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1dc10 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1dc20 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1dc30 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1dc40 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1dc70 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1dc80 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1dc90 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1dca0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1dcb0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1dcc0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1dcd0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1dce0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1dcf0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1dd00 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1dd10 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1dd20 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1dd30 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1dd50 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1dd60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1dd70 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1dd80 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1dd90 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1dda0 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1ddb0 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1ddc0 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1ddd0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1dde0 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1ddf0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
1de00 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1de10 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1de20 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1de30 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1de40 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1de50 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1de60 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1de70 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1de80 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1de90 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1dea0 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1deb0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1dec0 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1ded0 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1dee0 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1def0 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1df00 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1df10 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1df20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1df30 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
1df40 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1df50 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1df60 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1df70 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1df80 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1df90 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1dfa0 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1dfb0 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1dfc0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1dfd0 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
1dfe0 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
1dff0 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
1e000 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1e010 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
1e020 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
1e030 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
1e040 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1e050 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
1e060 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
1e070 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1e080 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
1e090 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
1e0a0 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
1e0b0 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
1e0c0 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
1e0d0 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
1e0e0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
1e0f0 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
1e100 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1e110 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1e120 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1e130 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1e140 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1e150 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1e160 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1e170 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1e180 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1e190 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1e1a0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e1b0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1e1c0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1e1d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1e1e0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1e1f0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1e200 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1e210 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1e220 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1e230 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1e240 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1e250 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1e260 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1e270 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1e280 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1e290 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1e2a0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1e2b0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1e2c0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1e2d0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1e2e0 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1e2f0 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1e300 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1e310 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1e320 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1e330 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1e340 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1e350 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1e360 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1e370 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
1e380 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1e390 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1e3a0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
1e3b0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
1e3c0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1e3d0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
1e3e0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
1e3f0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1e400 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1e410 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1e420 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
1e430 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
1e440 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1e450 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1e460 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1e470 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
1e480 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1e490 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1e4a0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1e4b0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1e4c0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1e4d0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1e4e0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1e4f0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1e500 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1e510 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1e520 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1e530 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e540 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1e550 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1e560 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1e570 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1e580 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1e590 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1e5a0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1e5b0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1e5c0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1e5d0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1e5e0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1e5f0 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1e600 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1e610 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1e620 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1e630 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1e640 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1e650 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1e660 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1e670 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1e680 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1e690 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
1e6a0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1e6b0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
1e6c0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
1e6d0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
1e6e0 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
1e6f0 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
1e700 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1e710 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1e720 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1e730 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1e740 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1e750 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1e760 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1e770 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1e780 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1e790 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1e7a0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1e7b0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1e7c0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1e7d0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1e7e0 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1e7f0 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1e800 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1e810 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1e820 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1e830 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1e840 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1e850 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1e860 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1e870 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1e880 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1e890 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1e8a0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1e8b0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1e8c0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1e8d0 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1e8e0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1e8f0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1e900 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1e910 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1e920 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1e930 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1e940 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1e950 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1e960 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1e970 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1e980 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1e990 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1e9a0 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1e9b0 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1e9c0 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1e9d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1e9e0 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1e9f0 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1ea00 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1ea10 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1ea20 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1ea30 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1ea40 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1ea50 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1ea60 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1ea70 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1ea80 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1ea90 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1eaa0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1eab0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1eac0 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1ead0 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1eae0 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1eaf0 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1eb00 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1eb10 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1eb20 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1eb30 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1eb40 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1eb50 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1eb60 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1eb70 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
1eb80 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
1eb90 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
1eba0 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
1ebb0 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
1ebc0 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
1ebd0 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
1ebe0 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
1ebf0 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
1ec00 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
1ec10 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
1ec20 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
1ec30 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
1ec40 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
1ec50 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1ec60 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
1ec70 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
1ec80 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
1ec90 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
1eca0 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
1ecb0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
1ecc0 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
1ecd0 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
1ece0 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
1ecf0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1ed00 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1ed10 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1ed20 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66  OOBIG */.};.#def
1ed30 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
1ed40 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
1ed50 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
1ed60 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  2../*.** A point
1ed70 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
1ed80 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
1ed90 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
1eda0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
1edb0 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
1edc0 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
1edd0 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
1ede0 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
1edf0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
1ee00 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1ee10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
1ee20 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
1ee30 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
1ee40 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
1ee50 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1ee60 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
1ee70 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1ee80 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
1ee90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1eea0 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
1eeb0 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
1eec0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1eed0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1eee0 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
1eef0 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
1ef00 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
1ef10 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
1ef20 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
1ef30 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
1ef40 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
1ef50 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
1ef60 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
1ef70 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
1ef80 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1ef90 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
1efa0 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
1efb0 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
1efc0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1efd0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
1efe0 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
1eff0 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f010 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1f020 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
1f030 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
1f040 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1f050 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1f060 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
1f070 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1f080 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f0a0 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
1f0b0 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
1f0c0 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
1f0d0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
1f0e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
1f0f0 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
1f100 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
1f110 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
1f120 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
1f130 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1f140 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
1f150 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
1f160 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
1f170 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1f180 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
1f190 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
1f1a0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1f1d0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1f1e0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1f1f0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1f200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1f210 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1f220 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1f230 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1f240 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1f250 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1f260 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1f270 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1f280 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1f290 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1f2a0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1f2b0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1f2c0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1f2d0 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1f2e0 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1f2f0 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1f300 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1f310 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1f340 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1f350 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f370 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1f380 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1f390 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1f3a0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1f3b0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1f3c0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1f3d0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
1f3e0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1f3f0 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
1f400 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
1f410 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1f420 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
1f430 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1f440 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
1f450 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
1f460 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1f470 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
1f480 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
1f490 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1f4c0 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
1f4d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
1f4e0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1f4f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f500 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
1f510 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
1f520 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
1f530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1f540 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
1f550 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
1f560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f570 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1f580 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
1f590 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1f5a0 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f5c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
1f5d0 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
1f5e0 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
1f5f0 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
1f600 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
1f610 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
1f620 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
1f630 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
1f640 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
1f650 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
1f660 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
1f670 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a  bled */.  u32 sz
1f680 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pma;            
1f690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1f6a0 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d  aximum Sorter PM
1f6b0 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54  A size */.  /* T
1f6c0 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
1f6d0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
1f6e0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
1f6f0 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
1f700 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
1f710 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
1f720 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
1f730 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
1f760 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
1f770 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1f780 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
1f7b0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
1f7c0 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
1f7d0 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1f800 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
1f810 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1f820 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f840 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1f850 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1f860 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
1f870 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
1f880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f890 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1f8a0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1f8b0 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1f8c0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1f8d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f8e0 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1f8f0 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
1f900 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
1f910 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
1f920 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
1f930 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1f940 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
1f950 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
1f960 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
1f970 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
1f980 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
1f990 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f9b0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
1f9c0 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
1f9d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1f9e0 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
1f9f0 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
1fa00 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
1fa10 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
1fa20 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
1fa30 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1fa40 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
1fa50 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
1fa60 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
1fa70 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
1fa80 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
1fa90 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
1faa0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
1fab0 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
1fac0 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
1fad0 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
1fae0 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
1faf0 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
1fb00 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
1fb10 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
1fb20 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
1fb30 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
1fb40 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
1fb80 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
1fb90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
1fba0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e  UILTIN_TEST.  in
1fbb0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
1fbc0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
1fbd0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
1fbe0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
1fbf0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1fc00 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fc20 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
1fc30 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
1fc40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
1fc50 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
1fc60 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
1fc70 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1fc80 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
1fc90 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
1fca0 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
1fcb0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
1fcc0 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
1fcd0 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
1fce0 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
1fcf0 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
1fd00 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
1fd10 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
1fd20 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
1fd30 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
1fd40 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
1fd50 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
1fd60 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
1fd70 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
1fd80 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
1fd90 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
1fda0 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
1fdb0 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
1fdc0 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
1fdd0 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
1fde0 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
1fdf0 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
1fe00 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
1fe10 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
1fe20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
1fe30 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
1fe40 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
1fe50 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
1fe60 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
1fe70 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
1fe80 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
1fe90 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
1fea0 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
1feb0 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
1fec0 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
1fed0 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
1fee0 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
1fef0 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
1ff00 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72   {.  int (*xExpr
1ff10 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1ff20 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
1ff30 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
1ff40 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1ff50 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
1ff60 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
1ff70 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
1ff80 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1ff90 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
1ffa0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
1ffb0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
1ffc0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
1ffd0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1ffe0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1fff0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20010 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
20020 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  .  */.  int walk
20030 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
20060 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
20070 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
200a0 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
200b0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200e0 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
200f0 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
20100 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
20110 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20130 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
20140 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20170 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72      /* A counter
20180 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72   */.    int iCur
20190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
201c0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
201d0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201f0 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
20200 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
20210 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
20220 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
20230 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
20240 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
20250 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b  rences */.  } u;
20260 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
20270 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
20280 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
20290 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
202a0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
202b0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
202c0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
202d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
202e0 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
202f0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
20300 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
20310 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
20320 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
20330 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
20340 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
20350 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  t*);../*.** Retu
20360 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
20370 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
20380 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
20390 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
203a0 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
203b0 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
203c0 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
203d0 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
203e0 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
203f0 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
20400 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
20410 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
20420 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
20430 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
20440 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
20450 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
20460 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
20470 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
20480 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
20490 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
204a0 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
204b0 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
204c0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
204d0 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
204e0 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
204f0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
20500 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
20510 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
20520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20530 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
20540 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
20550 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
20560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20570 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
20580 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
20590 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
205a0 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
205b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
205c0 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
205d0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
205e0 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
205f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
20600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
20610 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
20620 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
20630 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
20640 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
20650 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
20660 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
20670 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
20680 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
20690 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
206a0 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
206b0 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
206c0 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20   char *zErr;    
206d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
206e0 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
206f0 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
20700 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
20710 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
20720 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
20730 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
20740 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
20750 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
20760 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
20770 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
20780 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
20790 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
207a0 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
207b0 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
207c0 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
207d0 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
207e0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
207f0 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
20800 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
20810 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
20820 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
20830 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
20840 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
20850 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
20860 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
20870 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
20880 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
20890 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
208a0 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
208b0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
208c0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
208d0 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
208e0 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
208f0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
20900 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
20910 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
20920 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
20940 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
20950 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
20980 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
20990 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
209a0 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
209b0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
209f0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
20a00 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
20a10 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
20a20 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
20a30 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
20a40 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
20a50 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
20a60 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
20a70 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
20a80 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
20a90 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
20aa0 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
20ab0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
20ac0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
20ad0 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
20ae0 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
20af0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
20b00 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
20b10 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
20b20 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
20b30 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
20b40 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
20b50 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
20b60 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20b70 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
20b80 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
20b90 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
20ba0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
20bb0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
20bc0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
20bd0 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
20be0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
20bf0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
20c00 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
20c10 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
20c20 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
20c30 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  _).../*.** FTS4 
20c40 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
20c50 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
20c60 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
20c70 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
20c80 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
20c90 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
20ca0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
20cb0 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
20cc0 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
20cd0 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
20ce0 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
20cf0 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
20d00 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
20d10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
20d20 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
20d30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
20d40 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
20d50 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
20d60 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66  LE_FTS3 1.#endif
20d70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70  ../*.** The ctyp
20d80 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65  e.h header is ne
20d90 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43  eded for non-ASC
20da0 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20  II systems.  It 
20db0 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65  is also.** neede
20dc0 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46  d by FTS3 when F
20dd0 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20  TS3 is included 
20de0 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  in the amalgamat
20df0 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ion..*/.#if !def
20e00 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49  ined(SQLITE_ASCI
20e10 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  I) || \.    (def
20e20 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
20e30 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69  LE_FTS3) && defi
20e40 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47  ned(SQLITE_AMALG
20e50 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c  AMATION)).# incl
20e60 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65  ude <ctype.h>.#e
20e70 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
20e80 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
20e90 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64   mimic the stand
20ea0 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63  ard library func
20eb0 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c  tions toupper(),
20ec0 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69  .** isspace(), i
20ed0 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69  salnum(), isdigi
20ee0 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74  t() and isxdigit
20ef0 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  (), respectively
20f00 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20  . The.** sqlite 
20f10 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  versions only wo
20f20 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  rk for ASCII cha
20f30 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c  racters, regardl
20f40 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a  ess of locale..*
20f50 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20f60 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73  ASCII.# define s
20f70 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
20f80 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33    ((x)&~(sqlite3
20f90 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20fa0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32  ed char)(x)]&0x2
20fb0 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  0)).# define sql
20fc0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
20fd0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
20fe0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
20ff0 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65  )(x)]&0x01).# de
21000 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
21010 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65  num(x)   (sqlite
21020 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
21030 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
21040 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  06).# define sql
21050 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
21060 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
21070 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21080 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65  )(x)]&0x02).# de
21090 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
210a0 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65  git(x)   (sqlite
210b0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
210c0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
210d0 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  04).# define sql
210e0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
210f0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
21100 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21110 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65  )(x)]&0x08).# de
21120 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
21130 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65  wer(x)   (sqlite
21140 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75  3UpperToLower[(u
21150 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21160 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  ]).#else.# defin
21170 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
21180 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
21190 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
211a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
211b0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
211c0 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
211d0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
211e0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
211f0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
21200 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21210 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
21220 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
21230 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
21240 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
21250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
21260 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
21270 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
21280 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21290 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
212a0 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
212b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
212c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
212d0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
212e0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
212f0 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a  har)(x)).#endif.
21300 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21310 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
21320 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69  N_DIAGS.int sqli
21330 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
21340 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
21350 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
21360 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23   prototypes.*/.#
21370 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21380 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  rICmp sqlite3_st
21390 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65  ricmp.int sqlite
213a0 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
213b0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
213c0 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
213d0 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
213e0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
213f0 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
21400 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
21410 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
21420 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
21430 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21440 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
21450 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
21460 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
21470 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
21480 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
21490 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
214a0 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
214b0 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
214c0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
214d0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
214e0 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
214f0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21500 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
21510 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
21520 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
21530 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
21540 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
21550 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
21560 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
21570 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
21580 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
21590 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
215a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
215b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
215c0 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
215d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
215e0 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
215f0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
21600 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
21610 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
21620 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
21630 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
21640 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
21650 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
21660 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
21670 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
21680 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
21690 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
216a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
216b0 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
216c0 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
216d0 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
216e0 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
216f0 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a  (void));.#endif.
21700 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
21710 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
21720 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
21730 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
21740 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
21750 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
21760 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
21770 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
21780 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
21790 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
217a0 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
217b0 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
217c0 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
217d0 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
217e0 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
217f0 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
21800 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
21810 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
21820 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
21830 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
21840 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
21850 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
21860 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
21870 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
21880 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
21890 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
218a0 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
218b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
218c0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
218d0 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
218e0 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
218f0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
21900 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
21910 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21920 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
21930 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
21940 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
21950 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
21960 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
21970 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
21980 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
21990 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
219a0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
219b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
219c0 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
219d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
219e0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
219f0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
21a00 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
21a10 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
21a20 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
21a30 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
21a40 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
21a50 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
21a60 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
21a70 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
21a80 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
21a90 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
21aa0 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
21ab0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
21ac0 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
21ad0 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
21ae0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
21af0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
21b00 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
21b10 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
21b20 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
21b30 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
21b40 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
21b50 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
21b60 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
21b70 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
21b80 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
21b90 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
21ba0 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
21bb0 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74  ite3StatusUp(int
21bc0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21bd0 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69  ite3StatusDown(i
21be0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21bf0 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
21c00 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41  int, int);../* A
21c10 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
21c20 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
21c30 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
21c40 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
21c50 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
21c60 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
21c70 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
21c80 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
21c90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21ca0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
21cb0 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
21cc0 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
21cd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21ce0 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
21cf0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
21d00 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21d10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
21d20 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
21d30 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
21d40 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
21d50 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
21d60 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
21d70 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
21d80 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
21d90 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
21da0 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
21db0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21dc0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
21dd0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21de0 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21e00 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
21e10 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
21e20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
21e30 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
21e40 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
21e50 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  alues */.};..#de
21e60 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21e70 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
21e80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21e90 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
21ea0 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65  0x02.void sqlite
21eb0 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
21ec0 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
21ed0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
21ee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
21ef0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
21f00 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
21f10 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
21f20 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
21f30 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21f40 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
21f50 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
21f60 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21f70 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
21f80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
21f90 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
21fa0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
21fb0 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
21fc0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
21fd0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
21fe0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
21ff0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22000 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
22010 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
22020 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
22030 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
22040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
22050 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
22060 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
22070 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
22080 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
22090 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
220a0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
220b0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
220c0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
220d0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
220e0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
220f0 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
22100 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
22110 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
22120 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
22130 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
22140 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
22150 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22160 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
22170 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
22180 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
22190 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
221a0 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
221b0 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
221c0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
221d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
221e0 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
221f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
22200 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
22210 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
22220 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
22230 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
22240 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22250 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
22260 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
22270 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
22280 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
22290 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
222a0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
222b0 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
222c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
222d0 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
222e0 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
222f0 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
22300 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
22310 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
22320 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
22330 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
22340 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
22350 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
22360 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
22370 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
22380 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
22390 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
223a0 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
223b0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
223c0 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
223d0 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
223e0 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
223f0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
22400 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
22410 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
22420 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22430 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
22440 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
22450 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
22460 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
22470 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
22480 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
22490 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
224a0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
224b0 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
224c0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
224d0 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
224e0 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
224f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22500 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
22510 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
22520 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
22530 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
22540 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
22550 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
22560 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
22570 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
22580 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
22590 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
225a0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
225b0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
225c0 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
225d0 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
225e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
225f0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
22600 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
22610 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22620 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
22630 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
22640 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
22650 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
22660 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
22670 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22680 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
22690 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
226a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
226b0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
226c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
226d0 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
226e0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
226f0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
22700 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
22710 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
22720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
22730 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
22740 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
22750 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
22760 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
22770 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
22780 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
22790 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
227a0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
227b0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
227c0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
227d0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
227e0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
227f0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
22800 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
22810 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
22820 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22830 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
22840 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
22850 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
22860 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
22870 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
22880 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
22890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
228a0 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
228b0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
228c0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
228d0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
228e0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
228f0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
22900 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
22910 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22920 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
22930 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22940 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
22950 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
22960 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
22970 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
22980 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
22990 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
229a0 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
229b0 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
229c0 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
229d0 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
229e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
229f0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63  t sqlite3CodeOnc
22a00 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66  e(Parse *);..#if
22a10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22a20 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64  BUILTIN_TEST.# d
22a30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
22a40 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
22a50 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
22a60 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
22a70 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
22a80 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
22a90 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
22aa0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
22ab0 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
22ac0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
22ad0 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c  itvecTestNotNull
22ae0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
22af0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
22b00 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
22b10 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
22b20 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
22b30 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
22b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
22b50 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
22b60 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
22b70 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
22b80 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ec*);.#ifndef SQ
22b90 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22ba0 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74  N_TEST.int sqlit
22bb0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
22bc0 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
22bd0 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
22be0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
22bf0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
22c00 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
22c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22c20 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
22c30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
22c40 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
22c50 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
22c60 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
22c70 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
22c80 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
22c90 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
22ca0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
22cb0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
22cc0 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
22cd0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
22ce0 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  oken*,Select*,in
22cf0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
22d00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22d10 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
22d20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22d30 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
22d40 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
22d50 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
22d60 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
22d70 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22d80 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
22d90 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
22da0 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
22db0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
22dc0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
22dd0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
22de0 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
22df0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
22e00 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22e10 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
22e20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
22e30 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
22e40 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
22e50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22e60 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
22e70 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
22e80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22e90 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
22ea0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
22eb0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
22ec0 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
22ed0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22ee0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
22ef0 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
22f00 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22f10 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22f20 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
22f30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
22f40 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
22f50 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
22f60 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
22f70 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
22f80 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
22f90 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
22fa0 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
22fb0 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
22fc0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
22fd0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
22fe0 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
22ff0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
23000 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
23010 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
23020 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
23030 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
23040 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
23050 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
23060 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
23070 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
23080 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
23090 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
230a0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
230b0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
230c0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
230d0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
230e0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
230f0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23120 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
23130 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
23140 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
23150 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
23160 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
23170 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
23180 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
23190 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
231a0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
231b0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
231c0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
231d0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
231e0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
231f0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
23200 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
23210 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
23220 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
23230 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
23240 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
23250 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
23260 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
23270 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
23280 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
23290 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
232a0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
232b0 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
232c0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
232d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
232e0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
232f0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
23300 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
23320 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
23330 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
23340 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
23350 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
23360 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
23370 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
23380 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
23390 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
233a0 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
233b0 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
233c0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
233d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
233e0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
233f0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
23400 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
23410 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
23420 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
23430 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
23440 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
23450 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
23460 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
23470 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
23480 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
23490 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
234a0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
234b0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
234c0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
234d0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
234e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
234f0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
23500 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
23510 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
23520 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
23530 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
23540 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
23550 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
23560 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
23570 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
23580 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
23590 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
235a0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
235b0 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
235c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
235d0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
235e0 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
235f0 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
23600 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
23610 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
23620 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
23630 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23640 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
23650 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
23660 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
23670 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
23680 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23690 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
236a0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
236b0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
236c0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
236d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
236e0 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
236f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
23700 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
23710 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
23720 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23730 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
23740 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
23750 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
23760 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
23770 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
23780 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
23790 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
237a0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
237b0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
237c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
237d0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
237e0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
237f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
23800 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23810 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
23820 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23830 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23840 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
23850 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23870 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
23880 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
23890 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
238a0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
238b0 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
238c0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
238d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
238e0 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
238f0 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
23900 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
23910 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
23920 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
23930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23940 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
23950 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
23960 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
23970 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
23980 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23990 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
239a0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
239b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
239c0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
239d0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
239e0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
239f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23a00 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
23a10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23a20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23a30 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
23a40 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23a50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23a60 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
23a70 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
23a80 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
23a90 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
23aa0 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
23ab0 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
23ac0 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
23ad0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
23ae0 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
23af0 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
23b00 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
23b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23b20 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
23b30 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
23b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23b50 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
23b60 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
23b70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23b80 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
23b90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
23ba0 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
23bb0 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
23bc0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
23bd0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23be0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
23bf0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
23c00 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
23c10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
23c20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
23c30 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
23c40 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
23c50 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
23c60 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
23c70 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
23c80 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
23c90 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23ca0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23cb0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
23cc0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
23cd0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
23ce0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
23cf0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
23d00 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
23d10 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
23d20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
23d30 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
23d40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
23d50 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
23d60 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
23d70 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
23d80 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
23d90 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
23da0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
23db0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
23dc0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23dd0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
23de0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
23df0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
23e00 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
23e10 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78  esExpr(Expr*, Ex
23e20 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23e30 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
23e40 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
23e50 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
23e60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23e70 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
23e80 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
23e90 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
23ea0 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
23eb0 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
23ec0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
23ed0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
23ee0 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65  (Parse*);.#ifnde
23ef0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
23f00 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20  ILTIN_TEST.void 
23f10 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
23f20 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
23f30 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
23f40 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
23f50 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23f60 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
23f70 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
23f80 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
23f90 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
23fa0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23fb0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
23fc0 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
23fd0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
23fe0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
23ff0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
24000 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
24010 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
24020 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
24030 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
24040 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
24050 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
24060 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
24070 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
24080 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
24090 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
240a0 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
240b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
240c0 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
240d0 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
240e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
240f0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
24100 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24110 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
24120 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
24130 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
24140 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
24150 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
24160 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
24170 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
24180 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  pr*,int);.int sq
24190 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
241a0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
241b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
241c0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
241d0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
241e0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
241f0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
24200 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
24210 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
24220 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
24230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
24240 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
24250 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
24260 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
24270 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29  nt,i16,u8,u8,u8)
24280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
24290 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
242a0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
242b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
242c0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
242d0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
242e0 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
242f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
24300 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
24310 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24320 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
24330 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
24340 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
24350 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
24360 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
24370 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
24380 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
243b0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
243c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
243d0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
243e0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
243f0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
24400 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
24410 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
24420 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
24430 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
24440 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
24450 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
24460 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
24470 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
24480 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24490 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
244a0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
244b0 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
244c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
244d0 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
244e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
244f0 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
24500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
24510 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
24520 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
24530 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
24540 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
24550 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
24560 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
24570 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
24580 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
24590 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
245a0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
245b0 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
245c0 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
245d0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
245e0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
245f0 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
24600 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
24610 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
24620 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
24630 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
24640 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
24650 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43  ,int);.#if SELEC
24660 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76  TTRACE_ENABLED.v
24670 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
24680 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a  tSetName(Select*
24690 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
246a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
246b0 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
246c0 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  me(A,B).#endif.v
246d0 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
246e0 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
246f0 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
24700 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
24710 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
24720 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
24730 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
24740 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
24750 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
24760 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
24770 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24780 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
24790 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
247a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
247b0 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
247c0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
247d0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
247e0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
247f0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
24800 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
24810 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
24820 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
24830 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
24840 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
24850 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
24860 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
24870 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
24880 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
24890 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
248a0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
248b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
248c0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
248d0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
248e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
248f0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
24900 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
24910 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
24920 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
24950 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
24960 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
24970 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
24980 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
24990 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
249a0 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
249b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
249c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
249d0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
249e0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
249f0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
24a00 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
24a10 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
24a20 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
24a30 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
24a40 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
24a50 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
24a60 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
24a70 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24a80 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
24a90 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
24aa0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
24ab0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
24ae0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
24af0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
24b00 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
24b10 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
24b20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
24b30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
24b40 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
24b50 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
24b60 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
24b70 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
24b80 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
24b90 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
24ba0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
24bb0 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
24bc0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24bd0 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
24be0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
24bf0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
24c00 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
24c10 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
24c20 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
24c30 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c50 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
24c60 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
24c70 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
24c80 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
24c90 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
24ca0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
24cb0 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
24cc0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
24cd0 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
24ce0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
24cf0 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
24d00 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
24d10 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
24d20 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
24d30 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
24d40 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
24d50 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
24d60 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
24d70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
24d80 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
24d90 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
24da0 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
24db0 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
24dc0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
24dd0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
24de0 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
24df0 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65  plevel : (p)).#e
24e00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24e10 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
24e20 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
24e30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
24e40 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
24e50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24e60 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
24e70 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
24e80 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24e90 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
24ea0 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
24eb0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24ec0 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
24ed0 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
24ee0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
24ef0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
24f00 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
24f10 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
24f20 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
24f30 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
24f40 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
24f50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24f60 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
24f70 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
24f80 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
24f90 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
24fa0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24fb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
24fc0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
24fd0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
24fe0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
24ff0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
25000 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25010 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
25020 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
25030 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25040 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
25050 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
25060 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
25070 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
25080 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
25090 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
250a0 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
250b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
250c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
250d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
250e0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
250f0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
25100 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
25110 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
25120 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
25130 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
25140 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
25150 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
25160 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
25170 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
25180 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
25190 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
251a0 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
251b0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
251c0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
251d0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
251e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
251f0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
25200 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
25210 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
25220 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
25230 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
25240 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
25250 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
25260 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
25270 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
25280 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
25290 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
252a0 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
252b0 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
252c0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
252d0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
252e0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
252f0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
25300 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
25310 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
25320 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25330 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
25340 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
25350 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
25360 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
25370 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
25380 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
25390 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
253a0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
253b0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
253c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
253d0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
253e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
253f0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
25400 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
25410 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
25420 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
25430 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
25440 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
25450 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
25460 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
25470 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
25480 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
25490 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
254a0 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
254b0 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
254c0 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
254d0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
254e0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
254f0 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
25500 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25510 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
25520 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
25530 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
25540 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c  ;.#endif.u64 sql
25550 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
25560 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LogEst);../*.** 
25570 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
25580 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
25590 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
255a0 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
255b0 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
255c0 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
255d0 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
255e0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
255f0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
25600 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
25610 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
25620 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
25630 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
25640 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
25650 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
25660 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
25670 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
25680 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25690 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
256a0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
256b0 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
256c0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
256d0 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
256e0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
256f0 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
25700 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
25710 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
25720 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
25730 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
25740 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
25750 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
25760 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
25770 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
25780 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
25790 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
257a0 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
257b0 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
257c0 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
257d0 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
257e0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
257f0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
25800 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
25810 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
25820 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
25830 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
25840 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
25850 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
25860 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
25870 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
25880 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
25890 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
258a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
258b0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
258c0 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
258d0 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
258e0 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
258f0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
25900 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
25910 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
25920 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
25930 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
25940 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
25950 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
25960 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
25970 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
25980 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
25990 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
259a0 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
259b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
259c0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
259d0 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
259e0 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
259f0 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
25a00 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
25a10 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
25a20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
25a30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25a40 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
25a50 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
25a60 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
25a70 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
25a80 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
25a90 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
25aa0 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
25ab0 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
25ac0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
25ad0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
25ae0 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
25af0 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
25b00 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
25b10 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
25b20 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
25b30 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
25b40 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
25b50 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
25b60 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
25b70 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
25b80 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
25b90 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
25ba0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
25bb0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
25bc0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
25bd0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
25be0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
25bf0 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
25c00 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
25c10 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25c20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
25c30 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
25c40 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
25c50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
25c60 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
25c70 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
25c80 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
25c90 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
25ca0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
25cb0 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
25cc0 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
25cd0 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
25ce0 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
25cf0 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
25d00 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
25d10 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
25d20 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
25d30 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
25d40 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
25d50 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
25d60 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25d70 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
25d80 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
25d90 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
25da0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
25db0 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
25dc0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
25dd0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
25de0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25df0 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
25e00 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
25e10 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
25e20 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
25e30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25e40 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
25e50 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
25e60 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
25e70 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
25e80 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
25e90 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
25ea0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
25eb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
25ec0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
25ed0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
25ee0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
25ef0 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
25f00 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
25f10 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
25f40 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
25f50 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
25f60 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
25f70 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25f80 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
25f90 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
25fa0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
25fb0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
25fc0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
25fd0 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
25fe0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
25ff0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
26000 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
26010 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
26020 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
26030 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
26040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
26050 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
26060 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
26070 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
26080 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
26090 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
260a0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
260b0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
260c0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
260d0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
260e0 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
260f0 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
26100 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
26110 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
26120 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
26130 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
26140 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
26150 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
26160 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
26170 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
26180 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51  onfig;.extern SQ
26190 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66  LITE_WSD FuncDef
261a0 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62  Hash sqlite3Glob
261b0 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  alFunctions;.#if
261c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
261d0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
261e0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
261f0 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
26200 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
26210 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
26220 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
26230 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26240 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
26250 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26270 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
26280 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26290 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
262a0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
262b0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
262c0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
262d0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
262e0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
262f0 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
26300 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
26310 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26330 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
26340 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
26350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
26360 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
26370 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
26380 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26390 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
263a0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
263b0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
263c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
263d0 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
263e0 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
263f0 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
26400 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
26410 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
26420 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
26430 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
26440 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
26450 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
26460 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
26470 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
26480 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
26490 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
264a0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
264b0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
264c0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
264d0 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
264e0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
264f0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
26500 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
26510 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
26520 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
26530 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
26540 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
26550 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
26560 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
26570 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
26580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
26590 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
265a0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
265b0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
265c0 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
265d0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
265e0 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
265f0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
26600 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
26610 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
26620 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
26630 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
26640 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
26650 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
26660 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
26670 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26680 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26690 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
266a0 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
266b0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
266c0 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
266d0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
266e0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
266f0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
26700 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26710 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
26720 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
26730 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
26740 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
26750 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
26760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
26770 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
26780 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26790 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
267a0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
267b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
267c0 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
267d0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
267e0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
267f0 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46   sqlite3MinimumF
26800 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a  ileFormat(Parse*
26810 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26820 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
26830 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
26840 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
26850 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
26860 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
26870 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
26880 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
26890 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
268a0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
268b0 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
268c0 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
268d0 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
268e0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
268f0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
26900 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
26910 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
26920 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
26930 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
26940 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
26950 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
26960 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
26970 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
26980 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
26990 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
269a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
269b0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
269c0 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
269d0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
269e0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
269f0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
26a00 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
26a10 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
26a20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
26a30 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
26a40 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
26a50 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
26a60 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
26a70 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
26a80 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
26a90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26aa0 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
26ab0 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
26ac0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26ad0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
26ae0 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a   sqlite3*, char*
26af0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26b00 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26b10 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
26b20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
26b30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26b40 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
26b50 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
26b60 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26b70 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72  qlite3AppendChar
26b80 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63  (StrAccum*,int,c
26b90 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  har);.char *sqli
26ba0 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
26bb0 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
26bc0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
26bd0 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
26be0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26bf0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
26c00 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
26c10 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
26c20 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
26c30 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
26c40 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
26c50 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
26c60 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
26c70 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
26c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
26c90 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
26ca0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
26cb0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
26cc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26cd0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
26ce0 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
26cf0 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
26d00 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
26d10 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
26d20 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e  tValue(Parse*,In
26d30 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
26d40 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69  ord**,Expr*,u8,i
26d50 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
26d60 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
26d70 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
26d80 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
26d90 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
26da0 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
26db0 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
26dc0 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
26dd0 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
26de0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
26df0 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
26e00 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
26e10 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
26e20 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
26e30 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e  to the LEMON-gen
26e40 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f  erated parser.*/
26e50 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
26e60 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
26e70 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73  *)(u64));.void s
26e80 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
26e90 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
26ea0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
26eb0 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
26ec0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
26ed0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
26ee0 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
26ef0 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
26f00 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
26f10 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
26f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
26f30 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
26f40 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
26f50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
26f60 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
26f70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
26f80 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
26f90 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
26fa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
26fb0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
26fc0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
26fd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
26fe0 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
26ff0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
27000 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
27010 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
27020 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
27030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
27040 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
27050 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
27060 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
27070 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
27080 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
27090 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
270a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
270b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
270c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
270d0 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
270e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
270f0 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
27100 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
27110 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
27120 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
27130 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
27140 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
27150 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
27160 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
27170 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
27180 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  ) .#  define sql
27190 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
271a0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
271b0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
271c0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
271d0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
271e0 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
271f0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
27200 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
27210 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
27220 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
27230 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
27240 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
27250 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
27260 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
27270 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
27280 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
27290 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
272a0 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
272b0 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
272c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
272d0 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
272e0 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
272f0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
27300 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
27310 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
27320 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
27330 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
27340 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
27350 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
27360 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
27370 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
27380 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
27390 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
273a0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
273b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
273c0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
273d0 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
273e0 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
273f0 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
27400 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
27410 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
27420 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
27430 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
27440 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
27450 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
27460 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
27470 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
27480 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
27490 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
274a0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
274b0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
274c0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
274d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
274e0 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
274f0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
27500 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
27510 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
27520 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
27530 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
27540 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27550 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
27560 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
27570 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
27580 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
27590 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
275a0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
275b0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
275c0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
275d0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
275e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
275f0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
27600 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
27610 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
27620 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
27630 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
27640 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
27650 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
27660 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27670 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
27680 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27690 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
276a0 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
276b0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
276c0 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
276d0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
276e0 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
276f0 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
27700 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
27710 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27720 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
27730 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
27740 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
27750 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27760 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
27770 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
27780 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
27790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
277a0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
277b0 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
277c0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
277d0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
277e0 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
277f0 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
27800 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
27810 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
27820 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
27830 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
27840 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
27850 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
27860 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
27870 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
27880 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
27890 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
278a0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
278b0 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
278c0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
278d0 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
278e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
278f0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
27900 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
27910 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
27920 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
27930 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
27940 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
27950 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
27960 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
27970 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
27980 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
27990 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
279a0 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
279b0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
279c0 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
279d0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
279e0 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
279f0 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
27a00 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
27a10 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
27a20 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
27a30 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
27a40 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
27a50 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
27a60 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
27a70 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
27a80 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
27a90 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
27aa0 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
27ab0 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
27ac0 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
27ad0 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
27ae0 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
27af0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
27b00 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
27b10 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
27b20 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
27b30 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
27b40 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
27b50 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
27b60 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
27b70 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
27b80 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
27b90 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
27ba0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
27bb0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27bc0 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
27bd0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
27be0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
27bf0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
27c00 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
27c10 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
27c20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27c30 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
27c40 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
27c50 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
27c60 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
27c70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
27c80 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
27c90 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
27ca0 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
27cb0 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
27cc0 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
27cd0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
27ce0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
27cf0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
27d00 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
27d10 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
27d20 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27d30 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
27d40 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
27d50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
27d60 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
27d70 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27d80 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
27d90 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
27da0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
27db0 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
27dc0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27dd0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
27de0 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66  c,d)    0.#endif
27df0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27e00 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
27e10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27e20 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
27e30 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
27e40 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
27e50 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
27e60 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
27e70 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
27e80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27e90 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
27ea0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27eb0 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
27ec0 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
27ed0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
27ee0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
27ef0 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
27f00 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
27f10 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
27f20 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
27f30 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
27f40 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
27f50 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
27f60 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
27f70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
27f80 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
27f90 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
27fa0 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
27fb0 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
27fc0 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
27fd0 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
27fe0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
27ff0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
28000 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
28010 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
28020 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
28030 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
28040 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
28050 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
28060 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
28070 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
28080 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
28090 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
280a0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
280b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
280c0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
280d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
280e0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
280f0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
28100 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
28110 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
28120 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
28130 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
28140 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
28150 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
28160 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
28170 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
28180 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
28190 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
281a0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
281b0 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
281c0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
281d0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
281e0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
281f0 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
28200 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
28210 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
28220 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
28230 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
28240 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
28250 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
28260 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
28270 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
28280 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
28290 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
282a0 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
282b0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
282c0 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
282d0 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
282e0 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
282f0 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
28300 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
28310 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
28320 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
28330 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
28340 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
28350 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
28360 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
28370 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
28380 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
28390 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
283a0 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
283b0 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a   *, u32, int*);.
283c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
283d0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
283e0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
283f0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
28400 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
28410 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
28420 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
28430 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
28440 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
28450 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
28460 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
28470 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
28480 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
28490 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
284a0 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
284b0 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
284c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
284d0 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
284e0 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
284f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
28500 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
28510 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
28520 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
28530 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
28540 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
28550 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
28560 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
28570 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
28580 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
28590 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
285a0 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e  3ExprSetHeightAn
285b0 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50  dFlags(Parse *pP
285c0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
285d0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
285e0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
285f0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
28600 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
28610 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
28620 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
28630 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
28640 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
28650 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
28660 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
28670 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
28680 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
28690 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
286a0 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
286b0 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
286c0 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
286d0 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
286e0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
286f0 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
28700 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
28710 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
28720 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
28730 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
28740 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
28750 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
28760 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
28770 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
28780 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
28790 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
287a0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
287b0 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
287c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
287d0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
287e0 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
287f0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
28800 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
28810 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
28820 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
28830 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
28840 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
28850 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
28860 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
28870 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
28880 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
28890 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
288a0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
288b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
288c0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
288d0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
288e0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
288f0 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
28900 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28910 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
28920 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
28930 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
28940 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
28950 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
28960 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
28970 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
28980 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49  .SQLITE_API SQLI
28990 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
289a0 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71  SQLITE_CDECL *sq
289b0 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
289c0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
289d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
289e0 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
289f0 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
28a00 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
28a10 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
28a20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
28a30 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
28a40 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
28a50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
28a60 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
28a70 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
28a80 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
28a90 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
28aa0 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
28ab0 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
28ac0 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
28ad0 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
28ae0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28af0 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
28b00 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
28b10 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
28b20 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
28b30 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
28b40 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
28b50 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
28b60 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
28b70 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
28b80 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28b90 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
28ba0 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
28bb0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
28bc0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
28bd0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
28be0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
28bf0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
28c00 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
28c10 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
28c20 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
28c30 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
28c40 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
28c50 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
28c60 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
28c70 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
28c80 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
28c90 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
28ca0 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
28cb0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
28cc0 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
28cd0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
28ce0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
28cf0 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
28d00 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
28d10 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
28d20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
28d30 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
28d40 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
28d50 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
28d60 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
28d70 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
28d80 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
28d90 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
28da0 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
28db0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
28dc0 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
28dd0 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
28de0 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
28df0 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
28e00 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
28e10 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
28e20 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
28e30 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
28e40 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
28e50 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
28e60 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
28e70 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
28e80 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
28e90 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
28ea0 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
28eb0 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
28ec0 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
28ed0 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
28ee0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
28ef0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
28f00 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a   constraint. .**
28f10 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
28f20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
28f30 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
28f40 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
28f50 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
28f60 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
28f70 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
28f80 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
28f90 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
28fa0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
28fb0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
28fc0 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
28fd0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
28fe0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
28ff0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
29000 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
29010 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
29020 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
29030 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
29040 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
29050 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
29060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
29070 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
29080 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
29090 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
290a0 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
290b0 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
290c0 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
290d0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
290e0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
290f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
29100 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
29110 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
29120 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
29130 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
29140 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
29150 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
29160 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
29170 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
29180 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
29190 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
291a0 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
291b0 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
291c0 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
291d0 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
291e0 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
291f0 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
29200 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
29210 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
29220 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
29230 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
29240 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
29250 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
29260 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
29270 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
29280 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
29290 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
292a0 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
292b0 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73  lite3DbstatRegis
292c0 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
292d0 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
292e0 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a   _SQLITEINT_H_ *
292f0 2f 0a                                            /.