/ Hex Artifact Content
Login

Artifact 921678cb43bb7f63364e56757c07f3e6e0eb45c6:


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: 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65   unless prevente
1a90: 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49  d by.** the SQLI
1aa0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1ab0: 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a  NSIC define..*/.
1ac0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ad0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1ae0: 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65 66  INSIC).#  if def
1af0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1b00: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30  & _MSC_VER>=1300
1b10: 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e 65  .#    if !define
1b20: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20  d(_WIN32_WCE).# 
1b30: 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e       include <in
1b40: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70  trin.h>.#      p
1b50: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
1b60: 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74  _byteswap_ushort
1b70: 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  ).#      pragma 
1b80: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
1b90: 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20  wap_ulong).#    
1ba0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1bb0: 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61 72  ic(_ReadWriteBar
1bc0: 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65 0a  rier).#    else.
1bd0: 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c  #      include <
1be0: 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20  cmnintrin.h>.#  
1bf0: 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69 66    endif.#  endif
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c10: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
1c20: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
1c30: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
1c40: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
1c50: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1c60: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1c70: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1c80: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1c90: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1ca0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1cb0: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1cc0: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1cd0: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1ce0: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1cf0: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
1d00: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
1d10: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
1d20: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
1d30: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
1d40: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
1d50: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1d60: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1d70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1d80: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1d90: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1da0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1db0: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1dc0: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1dd0: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1de0: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1df0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1e00: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
1e10: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
1e20: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
1e30: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1e40: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
1e50: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1e60: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1e70: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1e80: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1e90: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1ea0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1eb0: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1ec0: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1ed0: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1ee0: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1ef0: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
1f00: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1f10: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
1f20: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
1f30: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
1f40: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
1f50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1f60: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1f70: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1f80: 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  ** EVIDENCE-OF: 
1f90: 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65  R-25715-37072 Me
1fa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1fb0: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 65  statistics are e
1fc0: 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66  nabled by.** def
1fd0: 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69  ault unless SQLi
1fe0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1ff0: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ith SQLITE_DEFAU
2000: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69  LT_MEMSTATUS=0 i
2010: 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20  n.** which case 
2020: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2030: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
2040: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
2050: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ault..*/.#if !de
2060: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
2070: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
2080: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2090: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
20a0: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
20b0: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
20c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
20d0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
20e0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
20f0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
2100: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
2110: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
2120: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
2130: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2140: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
2150: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
2160: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
2170: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
2180: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
2190: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
21a0: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
21b0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
21c0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
21d0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
21e0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
21f0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
2200: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
2210: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
2220: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
2230: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
2240: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
2250: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
2260: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
2270: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
2280: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
2290: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
22a0: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
22b0: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
22c0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
22d0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
22e0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
22f0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
2300: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
2310: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
2320: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
2330: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
2340: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
2350: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
2360: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
2370: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
2380: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
2390: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
23a0: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
23b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
23c0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
23d0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
23e0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
23f0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2400: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2410: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2420: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2430: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2440: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2450: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2460: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2470: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2480: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2490: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
24a0: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
24b0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
24c0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
24d0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
24e0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
24f0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
2500: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2510: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2520: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2540: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2550: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2560: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2570: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2590: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
25a0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
25b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
25c0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
25d0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
25e0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
25f0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
2600: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
2610: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2620: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2630: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2640: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2650: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2660: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2670: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2680: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2690: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
26a0: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
26b0: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
26c0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
26d0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
26e0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
26f0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
2700: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
2710: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2720: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2730: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2740: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2750: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2760: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2770: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2780: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2790: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
27a0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
27b0: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
27c0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
27d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
27e0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
27f0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
2800: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
2810: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2820: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2830: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2840: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2850: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2860: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2870: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2880: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2890: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
28a0: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
28b0: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
28c0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
28d0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
28e0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
28f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
2900: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
2910: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2920: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2930: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2940: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2950: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2960: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2970: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2980: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2990: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
29a0: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
29b0: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
29c0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
29d0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
29e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29f0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
2a00: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
2a10: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2a20: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2a30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2a40: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2a50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2a60: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2a70: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2a80: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2a90: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2aa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2ab0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2ac0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
2ad0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
2ae0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
2af0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
2b00: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b10: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2b20: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2b30: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2b40: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2b50: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2b60: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2b70: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2b80: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2b90: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2ba0: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2bb0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
2bc0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
2bd0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
2be0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
2bf0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
2c00: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
2c10: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2c20: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2c30: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2c40: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2c50: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2c60: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2c70: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2c80: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2c90: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2ca0: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2cb0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
2cc0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
2cd0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
2ce0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
2cf0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
2d00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
2d10: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2d20: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2d30: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2d40: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2d50: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2d60: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2d70: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2d80: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2d90: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2da0: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2db0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
2dc0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
2dd0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
2de0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2df0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2e00: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
2e10: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2e20: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2e30: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2e40: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2e50: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2e60: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2e70: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2e80: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2e90: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2ea0: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2eb0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2ec0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ed0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ee0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ef0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2f00: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2f10: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2f20: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2f30: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2f40: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2f50: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2f60: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2f70: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2f80: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2f90: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2fa0: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2fb0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2fc0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2fd0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2fe0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2ff0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3000: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3010: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3020: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3030: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3040: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3050: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3060: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3070: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3080: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3090: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
30a0: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
30b0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
30c0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
30d0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
30e0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
30f0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3100: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3110: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3120: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3130: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3140: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3150: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3160: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3170: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3180: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3190: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
31a0: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
31b0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
31c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
31d0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
31e0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
31f0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
3200: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
3210: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
3220: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
3230: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
3240: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
3250: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3260: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3270: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3280: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3290: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
32a0: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
32b0: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
32c0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
32d0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
32e0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
32f0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
3300: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
3310: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
3320: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
3330: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
3340: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
3350: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3360: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3370: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3380: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3390: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
33a0: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
33b0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
33c0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
33d0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
33e0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
33f0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
3400: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
3410: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3420: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3430: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3440: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3450: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3460: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3470: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3480: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3490: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
34a0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
34b0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
34c0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
34d0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
34e0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
34f0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3500: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3510: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3520: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3530: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3540: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3550: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3560: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3570: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3580: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3590: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
35a0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
35b0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
35c0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
35d0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
35e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
35f0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3600: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3610: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3620: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3630: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3640: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3650: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
3660: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
3670: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3680: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
3690: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
36a0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
36b0: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
36c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
36d0: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
36e0: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
36f0: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
3700: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
3710: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
3720: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
3730: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
3740: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
3750: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
3760: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
3770: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
3780: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
3790: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
37a0: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
37b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
37c0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
37d0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
37e0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
37f0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3800: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3810: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3820: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3830: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
3840: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
3850: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
3860: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
3870: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
3880: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
3890: 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67  nput is an integ
38a0: 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c  er that is too l
38b0: 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69  arge.** to fit i
38c0: 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73  n 32-bits.  This
38d0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
38e0: 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73  nside of various
38f0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d   testcase().** m
3900: 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20  acros to verify 
3910: 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73  that we have tes
3920: 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c  ted SQLite for l
3930: 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72  arge-file suppor
3940: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53  t..*/.#define IS
3950: 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28  _BIG_INT(X)  (((
3960: 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66  X)&~(i64)0xfffff
3970: 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  fff)!=0)../*.** 
3980: 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65  The macro unlike
3990: 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74  ly() is a hint t
39a0: 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20  hat surrounds a 
39b0: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65  boolean.** expre
39c0: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
39d0: 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61  ually false.  Ma
39e0: 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72  cro likely() sur
39f0: 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c  rounds.** a bool
3a00: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ean expression t
3a10: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74  hat is usually t
3a20: 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74  rue.  These hint
3a30: 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74  s could,.** in t
3a40: 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62  heory, be used b
3a50: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  y the compiler t
3a60: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
3a70: 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63  r code, but.** c
3a80: 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72  urrently they ar
3a90: 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20  e just comments 
3aa0: 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72  for human reader
3ab0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69  s..*/.#define li
3ac0: 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23  kely(X)    (X).#
3ad0: 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28  define unlikely(
3ae0: 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64  X)  (X)..#includ
3af0: 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c  e "hash.h".#incl
3b00: 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69  ude "parse.h".#i
3b10: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e  nclude <stdio.h>
3b20: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69  .#include <stdli
3b30: 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  b.h>.#include <s
3b40: 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64  tring.h>.#includ
3b50: 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e  e <assert.h>.#in
3b60: 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e  clude <stddef.h>
3b70: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
3b80: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
3b90: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
3ba0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
3bb0: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
3bc0: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
3bd0: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
3be0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3bf0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3c00: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
3c10: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
3c20: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
3c30: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
3c40: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
3c50: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
3c60: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
3c70: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
3c80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3c90: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
3ca0: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
3cb0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
3cc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
3cd0: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
3ce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
3cf0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
3d00: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
3d10: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
3d20: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
3d30: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
3d40: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
3d50: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
3d60: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
3d70: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
3d80: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
3d90: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
3da0: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
3db0: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
3dc0: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
3dd0: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
3de0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
3df0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
3e00: 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20  compiler .** to 
3e10: 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62  omit code used b
3e20: 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69  y TEMP tables wi
3e30: 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e  thout messy #ifn
3e40: 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  def statements..
3e50: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e60: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65  _OMIT_TEMPDB.#de
3e70: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
3e80: 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65   1.#else.#define
3e90: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23   OMIT_TEMPDB 0.#
3ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3eb0: 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e   "file format" n
3ec0: 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65  umber is an inte
3ed0: 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72  ger that is incr
3ee0: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
3ef0: 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76  .** the VDBE-lev
3f00: 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63  el file format c
3f10: 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c  hanges.  The fol
3f20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65  lowing macros de
3f30: 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20  fine the.** the 
3f40: 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72  default file for
3f50: 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61  mat for new data
3f60: 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61  bases and the ma
3f70: 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61  ximum file forma
3f80: 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69  t.** that the li
3f90: 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a  brary can read..
3fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3fb0: 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41  E_MAX_FILE_FORMA
3fc0: 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  T 4.#ifndef SQLI
3fd0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3fe0: 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20  FORMAT.# define 
3ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
4000: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e  ILE_FORMAT 4.#en
4010: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  dif../*.** Deter
4020: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69  mine whether tri
4030: 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73  ggers are recurs
4040: 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ive by default. 
4050: 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20   This can be.** 
4060: 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74  changed at run-t
4070: 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67  ime using a prag
4080: 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ma..*/.#ifndef S
4090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
40a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
40b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
40c0: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
40d0: 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65  VE_TRIGGERS 0.#e
40e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76  ndif../*.** Prov
40f0: 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ide a default va
4100: 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54  lue for SQLITE_T
4110: 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73  EMP_STORE in cas
4120: 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63  e it is not spec
4130: 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  ified.** on the 
4140: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a  command-line.*/.
4150: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54  #ifndef SQLITE_T
4160: 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69  EMP_STORE.# defi
4170: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4180: 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20  TORE 1.# define 
4190: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
41a0: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
41b0: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
41c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
41d0: 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73   If no value has
41e0: 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66   been provided f
41f0: 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  or SQLITE_MAX_WO
4200: 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72  RKER_THREADS, or
4210: 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45   if.** SQLITE_TE
4220: 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20  MP_STORE is set 
4230: 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20  to 3 (never use 
4240: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29  temporary files)
4250: 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20  , set it .** to 
4260: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
4270: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
4280: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
4290: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
42a0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
42b0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
42c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
42e0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
42f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4300: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
4310: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4320: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
4330: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4340: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4350: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4370: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4380: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
4390: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
43a0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
43b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
43c0: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
43d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
43e0: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
43f0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4400: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
4410: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4420: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
4430: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
4440: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
4450: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
4460: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
4470: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
4480: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
4490: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
44a0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
44b0: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
44c0: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
44d0: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
44e0: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
44f0: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
4500: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
4510: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
4520: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
4530: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
4540: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
4550: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69  will hold..*/.#i
4560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4570: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
4580: 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  SZ.# define SQLI
4590: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
45a0: 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e  E_INITSZ 100.#en
45b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
45c0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
45d0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
45e0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
45f0: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
4600: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
4610: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
4620: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
4630: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
4640: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
4650: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
4660: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
4670: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
4680: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
4690: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
46a0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64  o numbers..*/.#d
46b0: 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28  efine MIN(A,B) (
46c0: 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)<(B)?(A):(B))
46d0: 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  .#define MAX(A,B
46e0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
46f0: 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20  B))../*.** Swap 
4700: 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  two objects of t
4710: 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65  ype TYPE..*/.#de
4720: 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41  fine SWAP(TYPE,A
4730: 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41  ,B) {TYPE t=A; A
4740: 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a  =B; B=t;}../*.**
4750: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4760: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73   this machine us
4770: 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73  es EBCDIC.  (Yes
4780: 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a  , believe it or.
4790: 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72  ** not, there ar
47a0: 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73  e still machines
47b0: 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20   out there that 
47c0: 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a  use EBCDIC.).*/.
47d0: 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31  #if 'A' == '\301
47e0: 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  '.# define SQLIT
47f0: 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65  E_EBCDIC 1.#else
4800: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4810: 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a  _ASCII 1.#endif.
4820: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20  ./*.** Integers 
4830: 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20  of known sizes. 
4840: 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20   These typedefs 
4850: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72  might change for
4860: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a   architectures.*
4870: 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65  * where the size
4880: 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63  s very.  Preproc
4890: 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65  essor macros are
48a0: 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68   available so th
48b0: 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20  at the.** types 
48c0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e  can be convenien
48d0: 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74  tly redefined at
48e0: 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20   compile-type.  
48f0: 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  Like this:.**.**
4900: 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55           cc '-DU
4910: 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67  INTPTR_TYPE=long
4920: 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a   long int' ....*
4930: 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32  /.#ifndef UINT32
4940: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4950: 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64  VE_UINT32_T.#  d
4960: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
4970: 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73  E uint32_t.# els
4980: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4990: 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  32_TYPE unsigned
49a0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
49b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
49c0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
49d0: 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20  HAVE_UINT16_T.# 
49e0: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
49f0: 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65  YPE uint16_t.# e
4a00: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
4a10: 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT16_TYPE unsign
4a20: 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  ed short int.# e
4a30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4a40: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23  def INT16_TYPE.#
4a50: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31   ifdef HAVE_INT1
4a60: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  6_T.#  define IN
4a70: 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74  T16_TYPE int16_t
4a80: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4a90: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f  e INT16_TYPE sho
4aa0: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
4ab0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
4ac0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
4ad0: 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20   HAVE_UINT8_T.# 
4ae0: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
4af0: 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73  PE uint8_t.# els
4b00: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4b10: 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  8_TYPE unsigned 
4b20: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
4b30: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38  dif.#ifndef INT8
4b40: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4b50: 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  VE_INT8_T.#  def
4b60: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e  ine INT8_TYPE in
4b70: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
4b80: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
4b90: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
4ba0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4bb0: 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ef LONGDOUBLE_TY
4bc0: 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  PE.# define LONG
4bd0: 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67  DOUBLE_TYPE long
4be0: 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74   double.#endif.t
4bf0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e  ypedef sqlite_in
4c00: 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20  t64 i64;        
4c10: 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e    /* 8-byte sign
4c20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4c30: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e  pedef sqlite_uin
4c40: 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20  t64 u64;        
4c50: 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67   /* 8-byte unsig
4c60: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c70: 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ypedef UINT32_TY
4c80: 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20  PE u32;         
4c90: 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69    /* 4-byte unsi
4ca0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4cb0: 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54  typedef UINT16_T
4cc0: 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20  YPE u16;        
4cd0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73     /* 2-byte uns
4ce0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4cf0: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
4d00: 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20  YPE i16;        
4d10: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69      /* 2-byte si
4d20: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4d30: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
4d40: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
4d50: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
4d60: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4d70: 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59  .typedef INT8_TY
4d80: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
4d90: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
4da0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4db0: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41  ./*.** SQLITE_MA
4dc0: 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63  X_U32 is a u64 c
4dd0: 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20  onstant that is 
4de0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20  the maximum u64 
4df0: 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61  value.** that ca
4e00: 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  n be stored in a
4e10: 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73   u32 without los
4e20: 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  s of data.  The 
4e30: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30  value.** is 0x00
4e40: 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20  000000ffffffff. 
4e50: 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20   But because of 
4e60: 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63  quirks of some c
4e70: 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20  ompilers, we.** 
4e80: 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20  have to specify 
4e90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  the value in the
4ea0: 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20   less intuitive 
4eb0: 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f  manner shown:.*/
4ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4ed0: 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34  MAX_U32  ((((u64
4ee0: 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a  )1)<<32)-1)../*.
4ef0: 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
4f00: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73  used to store es
4f10: 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e  timates of the n
4f20: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
4f30: 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69   a.** table or i
4f40: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61  ndex.  This is a
4f50: 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n unsigned integ
4f60: 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39  er type.  For 99
4f70: 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f  .9% of.** the wo
4f80: 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e  rld, a 32-bit in
4f90: 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69  teger is suffici
4fa0: 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62  ent.  But a 64-b
4fb0: 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61  it integer.** ca
4fc0: 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d  n be used at com
4fd0: 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73  pile-time if des
4fe0: 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ired..*/.#ifdef 
4ff0: 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41  SQLITE_64BIT_STA
5000: 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20  TS. typedef u64 
5010: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36  tRowcnt;    /* 6
5020: 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65  4-bit only if re
5030: 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69  quested at compi
5040: 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65  le-time */.#else
5050: 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52  . typedef u32 tR
5060: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d  owcnt;    /* 32-
5070: 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75  bit is the defau
5080: 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  lt */.#endif../*
5090: 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75  .** Estimated qu
50a0: 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f  antities used fo
50b0: 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67  r query planning
50c0: 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31   are stored as 1
50d0: 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74  6-bit.** logarit
50e0: 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69  hms.  For quanti
50f0: 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20  ty X, the value 
5100: 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67  stored is 10*log
5110: 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67  2(X).  This.** g
5120: 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20  ives a possible 
5130: 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20  range of values 
5140: 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  of approximately
5150: 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39   1.0e986 to 1e-9
5160: 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61  86..** But the a
5170: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72  llowed values ar
5180: 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74  e "grainy".  Not
5190: 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20   every value is 
51a0: 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a  representable..*
51b0: 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71  * For example, q
51c0: 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64  uantities 16 and
51d0: 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70   17 are both rep
51e0: 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f  resented by a Lo
51f0: 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20  gEst.** of 40.  
5200: 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c  However, since L
5210: 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73  ogEst quantities
5220: 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20   are suppose to 
5230: 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a  be estimates,.**
5240: 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65   not exact value
5250: 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73  s, this imprecis
5260: 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f  ion is not a pro
5270: 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67  blem..**.** "Log
5280: 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f  Est" is short fo
5290: 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45  r "Logarithmic E
52a0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
52b0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
52c0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
52d0: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
52e0: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
52f0: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
5300: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
5310: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
5320: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
5330: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
5340: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
5350: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
5360: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
5370: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
5380: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
5390: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
53a0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
53b0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
53c0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
53d0: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
53e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
53f0: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
5400: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
5410: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
5420: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
5430: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
5440: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
5450: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
5460: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
5470: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
5480: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
5490: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
54a0: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
54b0: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
54c0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
54d0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
54e0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
54f0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
5500: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
5510: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5520: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
5530: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
5540: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
5550: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5560: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
5570: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5580: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
5590: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
55a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
55b0: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
55c0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
55d0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
55e0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
55f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
5600: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
5610: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5620: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
5630: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
5640: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
5650: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
5660: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
5670: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
5680: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
5690: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
56a0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
56b0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
56c0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
56d0: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
56e0: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
56f0: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
5700: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
5710: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
5720: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
5730: 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49  * -DSQLITE_RUNTI
5740: 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69  ME_BYTEORDER=1 i
5750: 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65  s set, then byte
5760: 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d  -order is determ
5770: 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74  ined.** at run-t
5780: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
5790: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
57a0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
57b0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
57c0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
57d0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
57e0: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
57f0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
5800: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
5810: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
5820: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
5830: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
5840: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
5850: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
5860: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
5870: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
5880: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
5890: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
58a0: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
58b0: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
58c0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
58d0: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
58e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
58f0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
5900: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5910: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
5920: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
5930: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
5940: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
5950: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
5960: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5970: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
5980: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
5990: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
59a0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
59b0: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
59c0: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
59d0: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
59e0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
59f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5a00: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
5a10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5a20: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
5a30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
5a40: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5a60: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5a70: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5a80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5a90: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5aa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5ab0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20  BYTEORDER    0  
5ac0: 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75     /* 0 means "u
5ad0: 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c  nknown at compil
5ae0: 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66  e-time" */.# def
5af0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
5b00: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
5b10: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
5b20: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
5b30: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5b40: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
5b50: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
5b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
5b70: 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54  16NATIVE  (SQLIT
5b80: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
5b90: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
5ba0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
5bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
5bc0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
5bd0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
5be0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
5bf0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
5c00: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
5c10: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
5c20: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
5c30: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
5c40: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
5c50: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
5c60: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
5c70: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
5c80: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
5c90: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
5ca0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
5cb0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
5cc0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
5cd0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
5ce0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
5cf0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
5d00: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
5d10: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
5d20: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
5d30: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
5d40: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
5d50: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
5d60: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
5d70: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
5d80: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
5d90: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
5da0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
5db0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
5dc0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
5dd0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
5de0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
5df0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
5e00: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
5e10: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
5e20: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
5e30: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
5e40: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
5e50: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
5e60: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
5e70: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
5e80: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
5e90: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5ea0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
5eb0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
5ec0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
5ed0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
5ee0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
5ef0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
5f00: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
5f10: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
5f20: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
5f30: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
5f40: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5f50: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
5f60: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5f70: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5f80: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5f90: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
5fa0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5fb0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5fc0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5fd0: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5fe0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
5ff0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
6000: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
6010: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
6020: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
6030: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6040: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
6050: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
6060: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
6070: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6090: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
60a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
60b0: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
60c0: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
60d0: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
60e0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
60f0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
6100: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
6110: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
6120: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
6130: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
6140: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
6150: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
6160: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
6170: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
6180: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
6190: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
61a0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
61b0: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
61c0: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
61d0: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
61e0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
61f0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
6200: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
6210: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
6220: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
6230: 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20  __FreeBSD__) \. 
6240: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72   || defined(__Dr
6250: 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64  agonFly__).#   d
6260: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6270: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
6280: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
6290: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
62a0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
62b0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
62c0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
62d0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
62e0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
62f0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
6300: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
6310: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
6320: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
6330: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
6340: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
6350: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
6360: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
6370: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
6380: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
6390: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
63a0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
63b0: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
63c0: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
63d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
63e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
63f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
6400: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
6410: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
6420: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6430: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
6440: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
6450: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
6460: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
6470: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
6480: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6490: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
64a0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
64b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
64c0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
64d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
64e0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
64f0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
6500: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6510: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
6520: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
6530: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
6540: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
6550: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
6560: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
6570: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
6580: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
6590: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
65a0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
65b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
65c0: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
65d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
65e0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
65f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6600: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
6610: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
6620: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
6630: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6640: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
6650: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
6660: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6670: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
6680: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
6690: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
66a0: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
66b0: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
66c0: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
66d0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
66e0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
66f0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
6700: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
6710: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
6720: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
6730: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
6740: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
6750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
6760: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
6770: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
6780: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
6790: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
67a0: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
67b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
67c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
67d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
67e0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
67f0: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
6800: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
6810: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
6820: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
6830: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
6840: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
6850: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
6860: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
6870: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
6880: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
6890: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
68a0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
68b0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
68c0: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
68d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
68e0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
68f0: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
6900: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
6910: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
6920: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
6930: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
6940: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6950: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
6960: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
6970: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
6980: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
6990: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
69a0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
69b0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
69e0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
69f0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6a10: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
6a20: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
6a30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
6a40: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
6a50: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
6a60: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
6a70: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
6a80: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
6a90: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
6aa0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
6ab0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6ac0: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6ad0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6ae0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6af0: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6b00: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6b10: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6b20: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6b30: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6b40: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6b50: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
6b60: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
6b70: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
6b80: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
6b90: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
6ba0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
6bb0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6bc0: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6bd0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6be0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6bf0: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6c00: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6c10: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6c20: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6c30: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6c40: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6c50: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6c60: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6c70: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6c80: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
6c90: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
6ca0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
6cb0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6cc0: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6cd0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6ce0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6cf0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6d00: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6d10: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6d20: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6d30: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6d40: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6d50: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6d60: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6d70: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6d80: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
6d90: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
6da0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
6db0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6dc0: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6dd0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6de0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6df0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6e00: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6e10: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6e20: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6e30: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6e40: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6e50: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6e60: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6e70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6e80: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
6e90: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
6ea0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
6eb0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6ec0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6ed0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6ee0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6ef0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6f00: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6f10: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6f20: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6f30: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6f40: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6f50: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6f60: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6f70: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6f80: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
6f90: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
6fa0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
6fb0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6fc0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6fd0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6fe0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6ff0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
7000: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
7010: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
7020: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
7030: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
7040: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
7050: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
7060: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
7070: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
7080: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
7090: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
70a0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
70b0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
70c0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
70d0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
70e0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
70f0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
7100: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
7110: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
7120: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
7130: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
7140: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
7150: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
7160: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
7170: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
7180: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
7190: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
71a0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
71b0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
71c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
71d0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
71e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
71f0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
7200: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
7210: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
7220: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
7230: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
7240: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
7250: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
7260: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
7270: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
7280: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
7290: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
72a0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
72b0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
72c0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
72d0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
72e0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
72f0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
7300: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
7310: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
7320: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
7330: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
7340: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
7350: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
7360: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
7370: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
7380: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
7390: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
73a0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
73b0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
73c0: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
73d0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
73e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
73f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
7400: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
7410: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
7420: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
7430: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
7440: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
7450: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
7460: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
7470: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
7480: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
7490: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
74a0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
74b0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
74c0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
74d0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
74e0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
74f0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
7500: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
7510: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
7520: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
7530: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
7540: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
7550: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
7560: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
7570: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
7580: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
7590: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
75a0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
75b0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
75c0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
75d0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
75e0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
75f0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
7600: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
7610: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
7620: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
7630: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
7640: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
7650: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
7660: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
7670: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
7680: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
7690: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
76a0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
76b0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
76c0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
76d0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
76e0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
76f0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
7700: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
7710: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
7720: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7730: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
7740: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
7750: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
7760: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
7770: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7780: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
7790: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
77a0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
77b0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
77c0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
77d0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
77e0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
77f0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
7800: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7810: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
7820: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7830: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
7840: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
7850: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
7860: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
7870: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
7880: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
7890: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
78a0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
78b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
78c0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
78d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78e0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
78f0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
7900: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
7910: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
7920: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
7930: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
7940: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
7950: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
7960: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7970: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
7980: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
7990: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
79a0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
79b0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
79c0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
79d0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
79e0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
79f0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
7a00: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
7a10: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
7a20: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
7a30: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
7a40: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
7a50: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
7a60: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
7a70: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7a80: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
7a90: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
7aa0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
7ab0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7ac0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
7ad0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
7ae0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
7af0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
7b00: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
7b10: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
7b20: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7b30: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
7b40: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
7b50: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
7b60: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
7b70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b80: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
7b90: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
7ba0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
7bb0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7bc0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
7bd0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
7be0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7bf0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7c00: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7c10: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7c20: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7c30: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7c40: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
7c50: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
7c60: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
7c70: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
7c80: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
7c90: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
7ca0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7cb0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
7cc0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
7cd0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
7ce0: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
7cf0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
7d00: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
7d10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d20: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
7d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d40: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
7d50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
7d60: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
7d70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
7d80: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
7d90: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
7da0: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
7db0: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
7dc0: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
7dd0: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
7de0: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
7df0: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
7e00: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
7e10: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
7e20: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
7e30: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
7e40: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
7e50: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
7e60: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
7e70: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
7e80: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
7e90: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
7ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
7eb0: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
7ec0: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
7ed0: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
7ee0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
7ef0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
7f00: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7f10: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
7f20: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
7f30: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
7f40: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
7f50: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
7f60: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
7f70: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
7f80: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
7f90: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
7fa0: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
7fb0: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
7fc0: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
7fd0: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
7fe0: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
7ff0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
8000: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
8010: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
8020: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
8030: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
8040: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
8050: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
8060: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
8070: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
8080: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
8090: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
80a0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
80b0: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
80c0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
80d0: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
80e0: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
80f0: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
8100: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
8110: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
8120: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8130: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
8140: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
8150: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
8160: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
8170: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
8180: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
8190: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
81a0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
81b0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
81c0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
81d0: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
81e0: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
81f0: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
8200: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
8210: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
8220: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
8230: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
8240: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
8250: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
8260: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
8270: 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65  ect..** .** Sche
8280: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
8290: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
82a0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
82b0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
82c0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
82d0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
82e0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
82f0: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
8300: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
8310: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
8320: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
8330: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
8340: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
8350: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
8360: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
8370: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
8380: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
8390: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
83a0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
83b0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
83c0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
83d0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
83e0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
83f0: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
8400: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
8410: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
8420: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
8430: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
8440: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
8450: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
8460: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
8470: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
8480: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
8490: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
84a0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
84b0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
84c0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
84d0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
84e0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
84f0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
8500: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
8510: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
8520: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
8530: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
8540: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
8550: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8560: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
8570: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
8580: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
8590: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
85a0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
85b0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
85c0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
85d0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
85e0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
85f0: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
8600: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
8610: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
8620: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
8630: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
8640: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
8650: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
8660: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
8670: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
8680: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
8690: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
86a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
86b0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
86c0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
86d0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
86e0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
86f0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
8700: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
8710: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
8720: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
8730: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
8740: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
8750: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
8760: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
8770: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
8780: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
8790: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
87a0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
87b0: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
87c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
87d0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
87e0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
87f0: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
8800: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
8810: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
8820: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
8830: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
8840: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
8850: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8860: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
8870: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
8880: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
8890: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
88a0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
88b0: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
88c0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
88d0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
88e0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
88f0: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
8900: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
8910: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
8920: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8930: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
8940: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
8950: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
8960: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
8970: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
8980: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
8990: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
89a0: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
89b0: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
89c0: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
89d0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
89e0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
89f0: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
8a00: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
8a10: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
8a20: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
8a30: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
8a40: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
8a50: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
8a60: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
8a70: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
8a80: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
8a90: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
8aa0: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
8ab0: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
8ac0: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
8ad0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
8ae0: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
8af0: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
8b00: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
8b10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
8b20: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
8b30: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
8b40: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
8b50: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
8b60: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
8b70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8b80: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
8b90: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
8ba0: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
8bb0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
8bc0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
8bd0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
8be0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
8bf0: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
8c00: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
8c10: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
8c20: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
8c30: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
8c40: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
8c50: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8c60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
8c70: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
8c80: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
8c90: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
8ca0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
8cb0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
8cc0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
8cd0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
8ce0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
8cf0: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
8d00: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
8d10: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
8d20: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
8d30: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
8d40: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
8d50: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
8d60: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8d70: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
8d80: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
8d90: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
8da0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
8db0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
8dc0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
8dd0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
8de0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
8df0: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
8e00: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
8e10: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
8e20: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
8e30: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
8e40: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
8e50: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8e60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
8e70: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
8e80: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
8e90: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
8ea0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
8eb0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
8ec0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
8ed0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
8ee0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
8ef0: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
8f00: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
8f10: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
8f20: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
8f30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
8f40: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
8f50: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
8f60: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
8f70: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
8f80: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
8f90: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
8fa0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
8fb0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
8fc0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
8fd0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
8fe0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
8ff0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
9000: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
9010: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
9020: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
9030: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
9040: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
9050: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
9060: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
9070: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
9080: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
9090: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
90a0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
90b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
90c0: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
90d0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
90e0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
90f0: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
9100: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
9110: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
9120: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
9130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
9140: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
9150: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
9160: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
9170: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
9180: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
9190: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
91a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
91b0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
91c0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
91d0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
91e0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
91f0: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
9200: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
9210: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
9220: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
9230: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
9240: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
9250: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
9260: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
9270: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
9280: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
9290: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
92a0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
92b0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
92c0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
92d0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
92e0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
92f0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
9300: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
9310: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
9320: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
9330: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
9340: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
9350: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
9360: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
9370: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
9380: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
9390: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
93a0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
93b0: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
93c0: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
93d0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
93e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
93f0: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
9400: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
9410: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
9420: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9430: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
9440: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9450: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
9460: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
9470: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9490: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
94a0: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
94b0: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
94e0: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
94f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
9500: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
9510: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
9520: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
9530: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
9540: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
9550: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
9560: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
9570: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
9580: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
9590: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
95a0: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
95b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
95c0: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
95d0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
95e0: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
95f0: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
9600: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
9610: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
9620: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
9630: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
9640: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
9650: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
9660: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
9670: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
9680: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
9690: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
96a0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
96b0: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
96c0: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
96d0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
96e0: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
96f0: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
9700: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
9710: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
9720: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
9730: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
9740: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
9750: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
9760: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
9770: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
9780: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
9790: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
97a0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
97b0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
97c0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
97d0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
97e0: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
97f0: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
9800: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
9810: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
9820: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9830: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
9840: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
9850: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
9860: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
9870: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9880: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9890: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
98c0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
98d0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
98e0: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
98f0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
9900: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
9910: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
9950: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ndif.../*.** Eac
9960: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
9970: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
9980: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9990: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
99a0: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
99b0: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
99c0: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
99d0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
99e0: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
99f0: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
9a00: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
9a10: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
9a20: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
9a30: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
9a40: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
9a50: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
9a60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
9a70: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
9a80: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
9a90: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
9aa0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
9ab0: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
9ae0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9b10: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
9b20: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
9b30: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73  /* Miscellaneous
9b60: 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f   flags. See belo
9b70: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
9b80: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
9b90: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
9ba0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
9bb0: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
9bc0: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9be0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
9bf0: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
9c00: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
9c10: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
9c20: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
9c30: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
9c40: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
9c50: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c70: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
9c80: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
9c90: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
9ca0: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
9cb0: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
9cc0: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
9cd0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
9ce0: 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  g */.  u16 dbOpt
9cf0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
9d00: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
9d10: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
9d20: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
9d30: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
9d60: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
9d70: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
9d80: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
9d90: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
9da0: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
9db0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9dc0: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
9dd0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
9de0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
9df0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
9e00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
9e10: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
9e20: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
9e30: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
9e40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9e50: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
9e60: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
9e70: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
9e80: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
9e90: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
9ea0: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
9eb0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
9ec0: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
9ed0: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
9ee0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
9ef0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
9f00: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
9f10: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
9f20: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
9f30: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
9f40: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
9f50: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
9f60: 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69    u8 isTransacti
9f70: 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  onSavepoint;    
9f80: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f  /* True if the o
9f90: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
9fa0: 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20  nt is a TS */.  
9fb0: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
9fc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9fd0: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
9fe0: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
9ff0: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a010: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
a020: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
a030: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
a040: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a060: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
a070: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
a080: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
a090: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
a0a0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a0b0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
a0c0: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
a0d0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
a0e0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
a0f0: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
a100: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
a110: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
a120: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
a130: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
a140: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
a150: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
a160: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
a170: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
a180: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
a190: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
a1a0: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1c0: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
a1d0: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
a1e0: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
a1f0: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
a200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
a210: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
a220: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
a230: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a250: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
a260: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
a270: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
a280: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
a290: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
a2a0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
a2b0: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
a2c0: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
a2d0: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
a2e0: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
a2f0: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
a300: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
a310: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
a320: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
a330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
a340: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
a350: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
a360: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
a370: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a380: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
a390: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
a3a0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
a3b0: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
a3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a3d0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
a3e0: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
a3f0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
a400: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
a410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a420: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
a430: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
a440: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
a450: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
a460: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a470: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
a480: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
a490: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
a4a0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
a4b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a4c0: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
a4d0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
a4e0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
a4f0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
a500: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
a510: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69  handles */.  voi
a520: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
a530: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  *,const char*); 
a540: 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20         /* Trace 
a550: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a560: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a580: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a590: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
a5a0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a5b0: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
a5c0: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
a5d0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
a5e0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
a5f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
a600: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a620: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
a630: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
a640: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
a650: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a660: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a670: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
a680: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e  ack() */   .  in
a690: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
a6a0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
a6b0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a6c0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a6d0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
a6e0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a6f0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a700: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
a710: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f  ack() */   .  vo
a720: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
a730: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
a740: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a750: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a760: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
a770: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
a780: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
a790: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
a7a0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
a7b0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
a7c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a7d0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
a7e0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
a7f0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
a800: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
a810: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
a820: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
a830: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
a840: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
a850: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
a860: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
a870: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
a880: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a890: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a8a0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
a8b0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
a8c0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
a8d0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
a8e0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
a8f0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
a900: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
a910: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
a920: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
a930: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
a940: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
a950: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
a960: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
a970: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
a980: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
a990: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
a9a0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
a9b0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
a9c0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
a9d0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
a9e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
a9f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
aa00: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
aa10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
aa20: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
aa30: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
aa40: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa60: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
aa70: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
aa80: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
aa90: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
aaa0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
aab0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
aac0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
aad0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
aae0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
aaf0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
ab00: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
ab10: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ab20: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
ab30: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
ab40: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
ab50: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
ab60: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
ab70: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
ab80: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
ab90: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
aba0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
abb0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
abc0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
abd0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
abe0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
abf0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
ac00: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
ac10: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
ac20: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
ac30: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ac40: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
ac50: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
ac60: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
ac70: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
ac80: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
ac90: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
acb0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
acc0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
acd0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
ace0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
acf0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
ad00: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
ad10: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
ad20: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
ad30: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
ad40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
ad50: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
ad60: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
ad70: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
ad80: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
ad90: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
ada0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
adb0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
adc0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
add0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
ade0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
adf0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
ae00: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
ae10: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
ae20: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
ae30: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
ae40: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
ae50: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
ae60: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
ae70: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
ae80: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
ae90: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
aea0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
aeb0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
aec0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
aed0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
aee0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
aef0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
af00: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
af10: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
af20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
af30: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
af40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
af50: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
af60: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
af70: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
af80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
af90: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
afa0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
afb0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
afc0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
afd0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
afe0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
aff0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
b000: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
b010: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
b020: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
b030: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
b040: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
b050: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
b060: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
b070: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
b080: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
b090: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
b0a0: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
b0b0: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
b0c0: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
b0d0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
b0e0: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
b0f0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
b100: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
b110: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
b120: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
b130: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
b140: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
b150: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
b160: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
b170: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
b180: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b190: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b1a0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
b1b0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
b1c0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
b1d0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
b1e0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
b1f0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
b200: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
b210: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
b220: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
b230: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
b240: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
b250: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
b260: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
b270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
b280: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
b290: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
b2a0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
b2b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b2c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b2d0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
b2e0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
b2f0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
b300: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
b310: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
b320: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
b330: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
b340: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
b350: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
b360: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
b370: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
b380: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b390: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b3a0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
b3b0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
b3c0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
b3d0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
b3e0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
b3f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
b400: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
b410: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
b420: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
b430: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
b440: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
b450: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
b460: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
b470: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
b480: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
b490: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
b4a0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
b4b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b4c0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
b4d0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
b4e0: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
b4f0: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
b500: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b510: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
b520: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
b530: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
b540: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
b550: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b560: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
b570: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65  00000004  /* Use
b580: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
b590: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
b5a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
b5b0: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
b5c0: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
b5d0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
b5e0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
b5f0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
b600: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
b610: 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0010  /* OK to s
b620: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
b630: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b640: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
b650: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
b660: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
b670: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
b680: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
b690: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
b6a0: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
b6b0: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
b6c0: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
b6d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
b6e0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
b6f0: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
b700: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
b710: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
b750: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
b760: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
b7a0: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
b7b0: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
b7c0: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
b7d0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
b7e0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
b7f0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
b800: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b830: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
b840: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
b850: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
b860: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
b870: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75  0000200  /* Debu
b880: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
b890: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
b8a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b8b0: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
b8c0: 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67  000400  /* Debug
b8d0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
b8e0: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
b8f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
b900: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
b910: 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  000800  /* OK to
b920: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
b930: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
b940: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
b950: 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30  pTrace 0x0000100
b960: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
b970: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
b980: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
b990: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
b9a0: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
b9b0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
b9c0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
b9d0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
b9e0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
b9f0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30  mmitted 0x000400
ba00: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
ba10: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
ba20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
ba30: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
ba40: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
ba50: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
ba60: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
ba70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
ba80: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
ba90: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e  00010000  /* Ign
baa0: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
bab0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bac0: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
bad0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
bae0: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
baf0: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
bb00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bb10: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
bb20: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0040000  /* Enab
bb30: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
bb40: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
bb50: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
bb60: 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30  eys    0x0008000
bb70: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
bb80: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
bb90: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
bba0: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
bbb0: 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ex      0x001000
bbc0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
bbd0: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
bbe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bbf0: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
bc00: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
bc10: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
bc20: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
bc30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
bc40: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
bc50: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
bc60: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
bc70: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bc80: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
bc90: 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20  er  0x00800000  
bca0: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
bcb0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
bcc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
bcd0: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31  erFKs       0x01
bce0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  000000  /* Defer
bcf0: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
bd00: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
bd10: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
bd20: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
bd30: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
bd40: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
bd50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bd60: 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78  dbeEQP        0x
bd70: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  04000000  /* Deb
bd80: 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  ug EXPLAIN QUERY
bd90: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
bda0: 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20   SQLITE_Vacuum  
bdb0: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
bdc0: 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  0  /* Currently 
bdd0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
bde0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
bdf0: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31  llSizeCk     0x1
be00: 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0000000  /* Chec
be10: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
be20: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a  es on load */...
be30: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
be40: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
be50: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
be60: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
be70: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
be80: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
be90: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
bea0: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
beb0: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
bec0: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
bed0: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
bee0: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
bef0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
bf00: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
bf10: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
bf20: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
bf30: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
bf40: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
bf50: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
bf60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bf70: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
bf80: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
bf90: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
bfa0: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
bfb0: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
bfc0: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
bfd0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
bfe0: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
bff0: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
c000: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
c010: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
c020: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
c030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
c040: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
c050: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
c060: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
c070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c080: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
c090: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
c0a0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
c0b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c0c0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
c0d0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
c0e0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
c0f0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
c100: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
c110: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
c120: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
c130: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
c140: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
c150: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
c160: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
c170: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
c180: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
c1a0: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
c1b0: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
c1c0: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
c1d0: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
c1e0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
c1f0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
c200: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
c210: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
c220: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
c230: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30  orHints    0x200
c240: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
c250: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
c260: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c270: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
c280: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
c290: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
c2a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
c2b0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
c2c0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
c2d0: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
c2e0: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
c2f0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
c300: 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
c310: 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f  N_TEST.#define O
c320: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
c330: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
c340: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
c350: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
c360: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c370: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
c380: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
c390: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
c3a0: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69  ==0).#else.#defi
c3b0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
c3c0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
c3d0: 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74  )  0.#define Opt
c3e0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
c3f0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23  (db, mask)   1.#
c400: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
c410: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
c420: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
c430: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
c440: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
c450: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
c460: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
c470: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
c480: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
c490: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
c4a0: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
c4b0: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
c4c0: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
c4d0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
c4e0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
c4f0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
c500: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
c510: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
c520: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
c530: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
c540: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
c550: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
c560: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
c570: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c580: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
c590: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
c5a0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
c5b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c5c0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
c5d0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
c5e0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
c5f0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
c600: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
c610: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
c620: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
c630: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
c640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c650: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
c660: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
c670: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
c680: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
c690: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
c6a0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
c6b0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
c6c0: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
c6d0: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
c6e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
c6f0: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
c700: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
c710: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
c720: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
c730: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
c740: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
c750: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c760: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
c770: 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f  structure.  A po
c780: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
c790: 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65  ructure is store
c7a0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  d in the sqlite.
c7b0: 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61  aFunc.** hash ta
c7c0: 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69  ble.  When multi
c7d0: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ple functions ha
c7e0: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
c7f0: 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  , the hash table
c800: 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  .** points to a 
c810: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74  linked list of t
c820: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e  hese structures.
c830: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
c840: 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b  ef {.  i16 nArg;
c850: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c860: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
c870: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
c880: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
c890: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
c8a0: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
c8b0: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
c8c0: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
c8d0: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
c8e0: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
c8f0: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
c900: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
c910: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
c920: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
c930: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  e */.  void (*xF
c940: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
c950: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
c960: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52  3_value**); /* R
c970: 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  egular function 
c980: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  */.  void (*xSte
c990: 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  p)(sqlite3_conte
c9a0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
c9b0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67  value**); /* Agg
c9c0: 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20  regate step */. 
c9d0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
c9e0: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
c9f0: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
ca00: 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74       /* Aggregat
ca10: 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  e finalizer */. 
ca20: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
ca30: 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d        /* SQL nam
ca40: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
ca50: 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  n. */.  FuncDef 
ca60: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
ca70: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
ca80: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
ca90: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
caa0: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
cab0: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
cac0: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
cad0: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
cae0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
caf0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  ./*.** This stru
cb00: 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74  cture encapsulat
cb10: 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69  es a user-functi
cb20: 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61  on destructor ca
cb30: 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f  llback (as.** co
cb40: 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63  nfigured using c
cb50: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
cb60: 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72  2()) and a refer
cb70: 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68  ence counter. Wh
cb80: 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e  en.** create_fun
cb90: 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61  ction_v2() is ca
cba0: 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  lled to create a
cbb0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
cbc0: 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20   destructor,.** 
cbd0: 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20  a single object 
cbe0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
cbf0: 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44  allocated. FuncD
cc00: 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69  estructor.nRef i
cc10: 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65  s set to .** the
cc20: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
cc30: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
cc40: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
cc50: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
cc60: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
cc70: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
cc80: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
cc90: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
cca0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
ccb0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
ccc0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
ccd0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
cce0: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
ccf0: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
cd00: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
cd10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
cd20: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
cd30: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
cd40: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
cd50: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
cd60: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
cd70: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
cd80: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
cd90: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
cda0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
cdb0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
cdc0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
cdd0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
cde0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
cdf0: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
ce00: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
ce10: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
ce20: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
ce30: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
ce40: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
ce50: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
ce60: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
ce70: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
ce80: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
ce90: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
cea0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
ceb0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
cec0: 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a  EOFARG.  There.*
ced0: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
cee0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
cef0: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
cf00: 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  this..*/.#define
cf10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
cf20: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
cf30: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
cf40: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
cf50: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
cf60: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
cf70: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
cf80: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
cf90: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
cfa0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
cfb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
cfc0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
cfd0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
cfe0: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
cff0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d000: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
d010: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
d020: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
d030: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
d040: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
d050: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
d060: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
d070: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
d080: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
d090: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d0a0: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
d0b0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
d0c0: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
d0d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d0e0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
d0f0: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
d100: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
d110: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d120: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
d130: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
d140: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
d150: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
d160: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d170: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
d180: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
d190: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
d1a0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
d1b0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
d1c0: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
d1d0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
d1e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d1f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d200: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
d210: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
d220: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
d230: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
d240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d250: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
d260: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
d270: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
d280: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
d290: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d2a0: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
d2b0: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
d2c0: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
d2d0: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
d300: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
d310: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
d320: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
d330: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
d340: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
d350: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
d360: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
d370: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
d380: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
d390: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
d3a0: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
d3b0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
d3c0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d3d0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d3e0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
d3f0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
d400: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
d410: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
d420: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
d430: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
d440: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
d450: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
d460: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
d470: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
d480: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
d490: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
d4a0: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
d4b0: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
d4c0: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
d4d0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d4e0: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
d4f0: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
d500: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
d510: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
d520: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d530: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
d540: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
d550: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d560: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d570: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
d580: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
d590: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
d5a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d5b0: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
d5c0: 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   DFUNCTION(zN
d5d0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d5e0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
d5f0: 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
d600: 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
d610: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
d620: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20  C_CONSTANT flag 
d630: 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20  and.**     adds 
d640: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d650: 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55  SLOCHNG flag.  U
d660: 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74  sed for date & t
d670: 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ime functions.**
d680: 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f       and functio
d690: 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76  ns like sqlite_v
d6a0: 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61  ersion() that ca
d6b0: 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f  n change, but no
d6c0: 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20  t during.**     
d6d0: 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a  a single query..
d6e0: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
d6f0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
d700: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
d710: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
d720: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
d730: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
d740: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
d750: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
d760: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
d770: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
d780: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
d790: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
d7a0: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
d7b0: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
d7c0: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
d7d0: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
d7e0: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
d7f0: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
d800: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
d810: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
d820: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
d830: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
d840: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
d850: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
d860: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
d870: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
d880: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
d890: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
d8a0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
d8b0: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
d8c0: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
d8d0: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
d8e0: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
d8f0: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
d900: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
d910: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
d920: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
d930: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
d940: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
d950: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
d960: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
d970: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
d980: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
d990: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
d9a0: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
d9b0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
d9c0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
d9d0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
d9e0: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
d9f0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
da00: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
da10: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
da20: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
da30: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
da40: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
da50: 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
da60: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
da70: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
da80: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
da90: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
daa0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
dab0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
dac0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
dad0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
dae0: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
daf0: 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
db00: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
db10: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
db20: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
db30: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
db40: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
db50: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
db60: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
db70: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
db80: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
db90: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
dba0: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
dbb0: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
dbc0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
dbd0: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
dbe0: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
dbf0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
dc00: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
dc10: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
dc20: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
dc30: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
dc40: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
dc50: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
dc60: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
dc70: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
dc80: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
dc90: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
dca0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
dcb0: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
dcc0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dcd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dce0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
dcf0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
dd00: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
dd10: 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
dd20: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dd30: 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
dd40: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
dd50: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
dd60: 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
dd70: 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
dd80: 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
dd90: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
dda0: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
ddb0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
ddc0: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
ddd0: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
dde0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
ddf0: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
de00: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
de10: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
de20: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
de30: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
de40: 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  0,0}.#define AGG
de50: 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
de60: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
de70: 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
de80: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
de90: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
dea0: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
deb0: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
dec0: 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
ded0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
dee0: 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78  ), 0, 0, xStep,x
def0: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30  Final,#zName,0,0
df00: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
df10: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
df20: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
df30: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
df40: 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
df50: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
df60: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
df70: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
df80: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
df90: 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
dfa0: 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
dfb0: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
dfc0: 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
dfd0: 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
dfe0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
dff0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
e000: 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
e010: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e030: 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
e040: 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
e050: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
e060: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
e070: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
e080: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
e090: 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
e0a0: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
e0b0: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
e0c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e0d0: 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
e0e0: 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
e0f0: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e110: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
e120: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
e130: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
e140: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
e150: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
e160: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
e170: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
e180: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
e190: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
e1a0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
e1b0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
e1c0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
e1d0: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
e1e0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
e1f0: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
e200: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
e210: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
e220: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
e230: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
e240: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
e250: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
e260: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
e270: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
e280: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
e290: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
e2a0: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
e2b0: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
e2c0: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
e2d0: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
e2e0: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
e2f0: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
e300: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
e310: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e330: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
e340: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
e350: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e370: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
e380: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
e390: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
e3a0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
e3b0: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
e3c0: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
e3d0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
e3e0: 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
e3f0: 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e410: 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
e420: 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
e430: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
e440: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
e450: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
e460: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
e470: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
e480: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
e490: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
e4a0: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
e4b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
e4c0: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
e4d0: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
e4e0: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
e4f0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
e500: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
e510: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
e520: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
e530: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
e540: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
e550: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
e560: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
e570: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e580: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
e590: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
e5a0: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
e5b0: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
e5c0: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
e5d0: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
e5e0: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
e5f0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
e600: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
e610: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
e620: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
e630: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
e640: 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
e650: 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
e660: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68  mated size of th
e670: 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d  is column.  INT=
e680: 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
e690: 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
e6a0: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
e6b0: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
e6c0: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
e6d0: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
e6e0: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
e6f0: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
e700: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
e710: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
e720: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
e730: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
e740: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
e750: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
e760: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
e770: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
e780: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
e790: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
e7a0: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
e7b0: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
e7c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
e7d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
e7e0: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
e7f0: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
e800: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
e810: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
e820: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
e830: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
e840: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
e850: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
e860: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
e870: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
e880: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
e890: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
e8a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
e8b0: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
e8c0: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
e8d0: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
e8e0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
e8f0: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
e900: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
e910: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
e920: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
e930: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
e940: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
e950: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
e960: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
e970: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
e980: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
e990: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
e9a0: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
e9b0: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
e9c0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
e9d0: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
e9e0: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
e9f0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
ea00: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
ea10: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
ea20: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
ea30: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
ea40: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
ea50: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
ea60: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
ea70: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
ea80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea90: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
eaa0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
eab0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
eac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
ead0: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
eae0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
eaf0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
eb00: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
eb10: 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
eb20: 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
eb30: 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
eb40: 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
eb50: 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
eb60: 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
eb70: 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
eb80: 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
eb90: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
eba0: 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
ebb0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
ebc0: 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
ebd0: 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
ebe0: 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
ebf0: 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
ec00: 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
ec10: 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
ec20: 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42  ively.  .**.** B
ec30: 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
ec40: 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
ec50: 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
ec60: 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
ec70: 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
ec80: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
ec90: 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
eca0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
ecb0: 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
ecc0: 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
ecd0: 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
ece0: 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
ecf0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
ed00: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
ed10: 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
ed20: 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
ed30: 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
ed40: 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
ed50: 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
ed60: 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
ed70: 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
ed80: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ed90: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
eda0: 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
edb0: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
edc0: 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
edd0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
ede0: 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
edf0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
ee00: 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
ee10: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
ee20: 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
ee30: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
ee40: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
ee50: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
ee60: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
ee70: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
ee80: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
ee90: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
eea0: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
eeb0: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
eec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eed0: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
eee0: 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
eef0: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
ef00: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
ef10: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
ef20: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
ef30: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
ef40: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
ef50: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
ef60: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
ef70: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
ef80: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
ef90: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
efa0: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
efb0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
efc0: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
efd0: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
efe0: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
eff0: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
f000: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
f010: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
f020: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
f030: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
f040: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
f050: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f060: 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
f070: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
f080: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
f090: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
f0a0: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
f0b0: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
f0c0: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
f0d0: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
f0e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f0f0: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
f100: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
f110: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f120: 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
f130: 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
f140: 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
f150: 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
f160: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
f170: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
f180: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
f190: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
f1a0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
f1b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
f1c0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
f1d0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
f1e0: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
f1f0: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
f200: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
f210: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
f220: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
f230: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
f240: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
f250: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
f260: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
f270: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
f280: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
f290: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
f2a0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
f2b0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
f2c0: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
f2d0: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
f2e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
f2f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
f300: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
f310: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
f320: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
f330: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
f340: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
f350: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
f360: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
f370: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
f380: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
f390: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
f3a0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
f3b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
f3c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
f3d0: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
f3e0: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
f3f0: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
f400: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
f410: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
f420: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
f430: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f440: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
f450: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
f460: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
f470: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
f480: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
f490: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
f4a0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
f4b0: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
f4c0: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
f4d0: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
f4e0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
f4f0: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
f500: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
f510: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
f520: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
f530: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
f540: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
f550: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
f560: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
f570: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
f580: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
f590: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
f5a0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
f5b0: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
f5c0: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
f5d0: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
f5e0: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
f5f0: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
f600: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
f610: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
f620: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
f630: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
f640: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
f650: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
f660: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
f670: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
f680: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
f690: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
f6a0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
f6b0: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
f6c0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
f6d0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
f6e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
f6f0: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
f700: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
f710: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
f720: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
f730: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
f740: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
f750: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
f760: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
f770: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
f780: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
f790: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
f7a0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
f7b0: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
f7c0: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
f7d0: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
f7e0: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
f7f0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
f800: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
f810: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
f820: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
f830: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
f840: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
f850: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
f860: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
f870: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
f880: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
f890: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
f8a0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
f8b0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
f8c0: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
f8d0: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
f8e0: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
f8f0: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
f900: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
f910: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
f920: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
f930: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
f940: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
f950: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
f960: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
f970: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
f980: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
f990: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
f9a0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
f9b0: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
f9c0: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
f9d0: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
f9e0: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
f9f0: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
fa00: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
fa10: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
fa20: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
fa30: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
fa40: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
fa50: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
fa60: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
fa70: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
fa80: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
fa90: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
faa0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
fab0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
fac0: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
fad0: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
fae0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
faf0: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
fb00: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
fb10: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
fb20: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
fb30: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
fb40: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
fb50: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
fb60: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
fb70: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
fb80: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
fb90: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
fba0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
fbb0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
fbc0: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
fbd0: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fbf0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
fc00: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
fc10: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
fc20: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
fc30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
fc40: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
fc50: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
fc60: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
fc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
fc80: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
fc90: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
fca0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
fcb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
fcc0: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
fcd0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
fce0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
fcf0: 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
fd00: 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
fd10: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
fd20: 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
fd30: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
fd40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
fd50: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
fd60: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
fd70: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
fd80: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
fd90: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
fda0: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
fdb0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
fdc0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
fdd0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
fde0: 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
fdf0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
fe00: 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
fe10: 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
fe20: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
fe30: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
fe40: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
fe50: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
fe60: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
fe70: 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
fe80: 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
fe90: 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
fea0: 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
feb0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
fec0: 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
fed0: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
fee0: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
fef0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
ff00: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
ff10: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
ff20: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
ff30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff40: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
ff50: 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
ff60: 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
ff70: 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
ff80: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
ff90: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
ffa0: 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
ffb0: 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
ffc0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
ffd0: 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
ffe0: 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
fff0: 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
10000 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
10010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10020 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10030 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
10040 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
10050 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10060 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
10070 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
10080 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
10090 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
100a0 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
100b0 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
100c0 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
100d0 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
100e0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
100f0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
10100 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
10110 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
10120 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
10130 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
10140 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
10150 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
10160 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
10170 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
10180 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
10190 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
101a0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
101b0 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
101c0 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
101d0 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
101e0 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
101f0 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
10200 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10210 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
10220 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
10230 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
10240 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
10250 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
10260 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
10270 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10280 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
10290 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
102a0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
102b0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
102c0 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
102d0 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
102e0 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
102f0 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
10300 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
10310 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
10320 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
10330 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
10340 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
10350 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
10360 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
10370 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
10380 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
10390 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
103a0 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
103b0 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
103c0 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
103d0 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
103e0 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
103f0 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
10400 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
10410 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
10420 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
10430 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
10440 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
10450 61 70 70 6c 69 65 73 20 74 6f 20 76 69 72 74 75  applies to virtu
10460 61 6c 20 74 61 62 6c 65 73 20 74 68 61 74 20 68  al tables that h
10470 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
10480 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
10490 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
104a0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
104b0 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
104c0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
104d0 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
104e0 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
104f0 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
10500 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
10510 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
10520 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
10530 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
10540 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
10550 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
10560 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
10570 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
10580 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
10590 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
105a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
105b0 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
105c0 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
105d0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
105e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
105f0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
10600 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
10610 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
10620 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
10630 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
10640 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
10650 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
10660 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
10670 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
10680 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
10690 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
106a0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
106b0 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
106c0 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
106d0 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
106e0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
106f0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
10700 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
10710 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
10720 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
10730 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
10740 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
10750 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
10760 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
10770 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
10780 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
10790 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
107a0 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
107b0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
107c0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
107d0 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
107e0 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
107f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10800 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
10810 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
10820 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
10830 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
10840 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
10850 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
10860 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
10870 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
10880 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
10890 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
108a0 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
108b0 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
108c0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
108d0 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
108e0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
108f0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20  ual(X)      0.# 
10900 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
10910 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
10920 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
10930 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
10940 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
10950 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
10960 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
10970 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
10980 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
10990 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
109a0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
109b0 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
109c0 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
109d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
109e0 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
109f0 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
10a00 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
10a10 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
10a20 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
10a30 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10a40 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
10a50 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
10a60 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
10a70 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
10a80 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
10a90 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
10aa0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
10ab0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
10ac0 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
10ad0 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
10ae0 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
10af0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
10b00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 29 0a 23  _OMIT_VIRTUAL).#
10b10 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
10b20 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
10b30 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
10b40 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
10b50 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
10b60 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
10b70 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
10b80 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
10b90 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10ba0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
10bb0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
10bc0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
10bd0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
10be0 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
10bf0 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
10c00 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
10c10 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
10c20 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
10c30 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
10c40 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
10c50 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
10c60 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
10c70 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
10c80 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
10c90 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
10ca0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
10cb0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10cc0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
10cd0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
10ce0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
10cf0 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
10d00 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
10d10 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
10d20 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
10d30 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10d40 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
10d50 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
10d60 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
10d70 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
10d80 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
10d90 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
10da0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
10db0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
10dc0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
10dd0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
10de0 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
10df0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
10e00 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
10e10 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
10e20 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
10e30 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
10e40 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
10e50 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
10e60 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
10e70 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
10e80 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
10e90 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
10ea0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
10eb0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
10ec0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
10ed0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
10ee0 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
10ef0 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
10f00 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
10f10 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10f20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10f30 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
10f40 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
10f50 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
10f60 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
10f70 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
10f80 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
10f90 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
10fa0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
10fb0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
10fc0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
10fd0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
10fe0 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
10ff0 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
11000 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
11010 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
11020 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
11030 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
11040 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
11050 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
11060 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
11070 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
11080 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
11090 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
110a0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
110b0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
110c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
110d0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
110e0 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
110f0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
11100 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
11110 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
11120 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
11130 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
11140 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
11150 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11160 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
11170 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
11180 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
11190 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
111a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
111b0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
111c0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
111d0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
111e0 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
111f0 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
11200 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
11210 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
11220 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11230 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
11240 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
11250 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
11260 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
11270 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
11280 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
11290 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
112a0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
112b0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
112c0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
112d0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
112e0 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
112f0 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
11300 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
11310 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
11320 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
11330 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
11340 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
11350 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
11360 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
11370 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
11380 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
11390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
113a0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
113b0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
113c0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
113d0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
113e0 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
113f0 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
11400 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
11410 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
11420 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
11430 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
11440 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
11450 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
11460 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
11470 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
11480 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
11490 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
114a0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
114b0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
114c0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
114d0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
114e0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
114f0 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
11500 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
11510 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
11520 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
11530 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
11540 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
11550 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
11560 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
11570 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
11580 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
11590 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
115a0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
115b0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
115c0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
115d0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
115e0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
115f0 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
11600 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
11610 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
11620 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
11630 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
11640 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
11650 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
11660 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
11670 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
11680 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
11690 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
116a0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
116b0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
116c0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
116d0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
116e0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
116f0 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
11700 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
11710 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
11720 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
11730 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
11740 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
11750 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
11760 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
11770 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
11780 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
11790 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
117a0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
117b0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
117c0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
117d0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
117e0 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
117f0 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
11800 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
11810 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
11820 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
11830 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
11840 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
11850 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
11860 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
11870 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
11880 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
11890 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
118a0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
118b0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
118c0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
118d0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
118e0 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
118f0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
11900 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
11910 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
11920 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
11930 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
11940 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
11950 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a  reign key..** .*
11960 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11970 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
11980 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
11990 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
119a0 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
119b0 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
119c0 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
119d0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
119e0 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
119f0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
11a00 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
11a10 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
11a20 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
11a30 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
11a40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
11a50 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
11a60 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
11a70 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
11a80 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
11a90 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
11aa0 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
11ab0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
11ac0 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
11ad0 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
11ae0 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
11af0 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
11b00 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
11b10 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
11b20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
11b30 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
11b40 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
11b50 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
11b60 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
11b70 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
11b80 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
11b90 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
11ba0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
11bb0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
11bc0 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
11bd0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
11be0 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
11bf0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
11c00 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
11c10 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
11c20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
11c30 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
11c40 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
11c50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
11c60 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
11c70 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
11c80 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
11c90 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a  _Default  10  /*
11ca0 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
11cb0 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
11cc0 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
11cd0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11ce0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11cf0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
11d00 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
11d10 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
11d20 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
11d30 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
11d40 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20  control the .** 
11d50 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
11d60 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
11d70 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
11d80 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61  t aSortOrder[] a
11d90 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20  nd aColl[] have 
11da0 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20  nField+1 slots. 
11db0 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46   There.** are nF
11dc0 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74  ield slots for t
11dd0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  he columns of an
11de0 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20   index then one 
11df0 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f  extra slot.** fo
11e00 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  r the rowid at t
11e10 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
11e20 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33  t KeyInfo {.  u3
11e30 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  2 nRef;         
11e40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
11e50 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69  eferences to thi
11e60 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  s KeyInfo object
11e70 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
11e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
11e90 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
11ea0 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
11eb0 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
11ec0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
11ed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11ee0 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   key columns in 
11ef0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
11f00 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20  16 nXField;     
11f10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11f20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74  columns beyond t
11f30 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a  he key columns *
11f40 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  /.  sqlite3 *db;
11f50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
11f60 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11f70 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  on */.  u8 *aSor
11f80 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
11f90 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
11fa0 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  ch column. */.  
11fb0 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
11fc0 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
11fd0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
11fe0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
11ff0 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
12000 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
12010 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68  s a record which
12020 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64   has been parsed
12030 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
12040 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20  dual.** fields, 
12050 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
12060 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70   of doing a comp
12070 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20  arison..**.** A 
12080 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
12090 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
120a0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
120b0 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
120c0 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
120d0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
120e0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
120f0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
12100 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
12110 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
12120 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
12130 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
12140 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
12150 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
12160 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
12170 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
12180 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
12190 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
121a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
121b0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  of this object s
121c0 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22  erves as a "key"
121d0 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61   for doing a sea
121e0 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64  rch on.** an ind
121f0 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67  ex b+tree. The g
12200 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63  oal of the searc
12210 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65  h is to find the
12220 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69   entry that.** i
12230 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20  s closed to the 
12240 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79  key described by
12250 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
12260 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74  his object might
12270 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20   hold.** just a 
12280 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
12290 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
122a0 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65  f fields is give
122b0 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f  n by.** pKeyInfo
122c0 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  ->nField..**.** 
122d0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69  The r1 and r2 fi
122e0 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c  elds are the val
122f0 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66  ues to return if
12300 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73   this key is les
12310 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65  s than.** or gre
12320 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20  ater than a key 
12330 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65  in the btree, re
12340 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12350 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a  se are normally.
12360 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73  ** -1 and +1 res
12370 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d  pectively, but m
12380 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64  ight be inverted
12390 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66   to +1 and -1 if
123a0 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69   the b-tree.** i
123b0 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e  s in DESC order.
123c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
123d0 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
123e0 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74  ons actually ret
123f0 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77  urn default_rc w
12400 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a  hen they find.**
12410 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61   an equals compa
12420 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f  rison.  default_
12430 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c  rc can be -1, 0,
12440 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72   or +1.  If ther
12450 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c  e are.** multipl
12460 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e entries in the
12470 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65   b-tree with the
12480 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20   same key (when 
12490 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20  only looking.** 
124a0 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65  at the first pKe
124b0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29  yInfo->nFields,)
124c0 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   then default_rc
124d0 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d   can be set to -
124e0 31 20 74 6f 20 0a 2a 2a 20 63 61 75 73 65 20 74  1 to .** cause t
124f0 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e  he search to fin
12500 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  d the last match
12510 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65  , or +1 to cause
12520 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a   the search to.*
12530 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74  * find the first
12540 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68   match..**.** Th
12550 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
12560 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
12570 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72  set eqSeen to tr
12580 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a  ue if they ever.
12590 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c  ** get and equal
125a0 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f   results when co
125b0 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72  mparing this str
125c0 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72  ucture to a b-tr
125d0 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68  ee record..** Wh
125e0 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30  en default_rc!=0
125f0 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67  , the search mig
12600 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65  ht end up on the
12610 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74   record immediat
12620 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68  ely.** before th
12630 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72  e first match or
12640 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
12650 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  er the last matc
12660 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65  h.  The.** eqSee
12670 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64  n field will ind
12680 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72  icate whether or
12690 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61   not an exact ma
126a0 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68  tch exists in th
126b0 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a  e.** b-tree..*/.
126c0 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
126d0 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
126e0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
126f0 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
12700 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
12710 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ation */.  Mem *
12720 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
12730 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * Values */.  u1
12740 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
12750 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
12760 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
12770 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
12780 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
12790 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
127a0 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
127b0 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
127c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
127d0 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
127e0 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
127f0 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
12800 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20  ) */.  i8 r1;   
12810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
12820 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
12830 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
12840 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20    i8 r2;        
12850 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
12860 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73  o return if (rhs
12870 20 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20   < lhs) */.  u8 
12880 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20  eqSeen;         
12890 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65   /* True if an e
128a0 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73  quality comparis
128b0 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  on has been seen
128c0 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
128d0 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
128e0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
128f0 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
12900 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12910 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12920 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
12930 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
12940 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
12950 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
12960 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
12970 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
12980 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
12990 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
129a0 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
129b0 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
129c0 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
129d0 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
129e0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
129f0 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
12a00 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
12a10 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
12a20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
12a30 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
12a40 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
12a50 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
12a60 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
12a70 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
12a80 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
12a90 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
12aa0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
12ab0 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
12ac0 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
12ad0 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
12ae0 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
12af0 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
12b00 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
12b10 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
12b20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
12b30 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
12b40 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
12b50 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
12b60 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
12b70 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
12b80 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
12b90 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
12ba0 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
12bb0 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
12bc0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
12bd0 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
12be0 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
12bf0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
12c00 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
12c10 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
12c20 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
12c30 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
12c40 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
12c50 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
12c60 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
12c70 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
12c80 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
12c90 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
12ca0 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
12cb0 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
12cc0 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
12cd0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
12ce0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
12cf0 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
12d00 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
12d10 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
12d20 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
12d30 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
12d40 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
12d50 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
12d60 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
12d70 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
12d80 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
12d90 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
12da0 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
12db0 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
12dc0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
12dd0 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
12de0 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
12df0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
12e00 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
12e10 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
12e20 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
12e30 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
12e40 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
12e50 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
12e60 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
12e70 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
12e80 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
12e90 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
12ea0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
12eb0 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
12ec0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
12ed0 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
12ee0 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
12ef0 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
12f00 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
12f10 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
12f20 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
12f30 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
12f40 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
12f50 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
12f60 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
12f70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
12f80 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
12f90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
12fa0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
12fb0 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
12fc0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
12fd0 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
12fe0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
12ff0 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
13000 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
13010 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
13020 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
13030 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
13040 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
13050 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
13060 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
13070 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
13080 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
13090 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
130a0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
130b0 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
130c0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
130d0 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
130e0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
130f0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
13100 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
13110 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13120 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
13130 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
13140 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
13150 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
13160 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
13170 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
13180 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
13190 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
131a0 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
131b0 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
131c0 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
131d0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
131e0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
131f0 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
13200 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
13210 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
13220 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
13230 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
13240 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
13250 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
13260 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
13270 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
13280 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
13290 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
132a0 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
132b0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
132c0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
132d0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
132e0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
132f0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
13300 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
13310 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
13320 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13330 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
13340 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
13350 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
13360 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13370 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
13380 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
13390 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
133b0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
133c0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
133d0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
133e0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
133f0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
13400 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
13410 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
13420 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
13430 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
13440 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
13450 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
13460 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
13470 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
13480 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
13490 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
134a0 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
134b0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
134c0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
134d0 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
134e0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
134f0 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
13500 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
13510 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
13520 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
13530 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
13540 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
13550 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
13560 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
13570 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
13580 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
13590 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  rue */.#ifdef SQ
135a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
135b0 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74  3_OR_STAT4.  int
135c0 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20   nSample;       
135d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
135e0 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61  of elements in a
135f0 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e  Sample[] */.  in
13600 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20  t nSampleCol;   
13610 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
13620 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e  f IndexSample.an
13630 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a  Eq[] and so on *
13640 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76  /.  tRowcnt *aAv
13650 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gEq;         /* 
13660 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
13670 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20  es for keys not 
13680 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
13690 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
136a0 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
136b0 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
136c0 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52  most key */.  tR
136d0 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
136e0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
136f0 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20  garithmic stat1 
13700 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e  data for this in
13710 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  dex */.  tRowcnt
13720 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20   nRowEst0;      
13730 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
13740 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72  hmic number of r
13750 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
13760 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
13770 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13780 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
13790 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
137a0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
137b0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
137c0 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
137d0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
137e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
137f0 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
13800 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
13810 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
13820 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
13830 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
13840 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
13850 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
13860 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
13870 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
13880 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
13890 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
138a0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
138b0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
138c0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
138d0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
138e0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
138f0 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
13900 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
13910 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
13920 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
13930 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
13940 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
13950 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
13960 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
13970 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
13980 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
13990 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
139a0 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
139b0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
139c0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
139d0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
139e0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
139f0 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
13a00 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
13a10 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
13a20 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
13a30 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
13a40 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
13a50 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
13a60 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
13a70 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
13a80 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
13a90 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
13aa0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
13ab0 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
13ac0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
13ad0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
13ae0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
13af0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
13b00 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
13b10 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
13b20 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
13b30 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
13b40 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
13b50 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
13b60 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
13b70 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
13b80 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
13b90 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
13ba0 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
13bb0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
13bc0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13bd0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
13be0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
13bf0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13c00 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
13c10 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13c20 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
13c30 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
13c40 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
13c50 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
13c60 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13c70 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
13c80 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
13c90 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
13ca0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
13cb0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
13cc0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
13cd0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
13ce0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
13cf0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
13d00 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
13d10 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
13d20 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
13d30 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
13d40 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
13d50 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
13d60 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
13d70 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
13d80 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
13d90 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
13da0 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
13db0 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
13dc0 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
13dd0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
13de0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13df0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
13e00 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
13e10 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
13e20 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
13e30 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
13e40 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
13e50 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
13e60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
13e70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
13e80 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
13e90 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
13ea0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13eb0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
13ec0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
13ed0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
13ee0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
13ef0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
13f00 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
13f10 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
13f20 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
13f30 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
13f40 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
13f50 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
13f60 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
13f70 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
13f80 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
13f90 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
13fa0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
13fb0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13fc0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
13fd0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
13fe0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
13ff0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
14000 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
14010 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
14020 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
14030 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
14040 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
14050 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
14060 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
14070 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
14080 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
14090 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
140a0 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
140b0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
140c0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
140d0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
140e0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
140f0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
14100 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
14110 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
14140 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
14150 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
14160 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
14170 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
14180 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
14190 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
141a0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
141b0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
141e0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
141f0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
14200 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
14210 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
14220 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
14230 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
14240 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
14250 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
14260 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
14270 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
14280 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
14290 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
142a0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
142b0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
142c0 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
142d0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
142e0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
142f0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
14300 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
14310 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
14320 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
14330 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
14340 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
14350 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
14360 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
14370 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
14380 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
14390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
143a0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
143b0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
143d0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
143e0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
143f0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
14400 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
14410 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
14420 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
14430 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
14440 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
14450 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
14460 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
14470 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
14480 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
14490 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
144a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
144b0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
144c0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
144d0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
144e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
144f0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
14500 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
14510 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
14520 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
14530 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
14540 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
14550 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
14560 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
14570 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14580 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
14590 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
145a0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
145d0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
145e0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
145f0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
14620 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
14630 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
14640 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
14650 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
14660 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
14670 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
14680 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
14690 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
146a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
146b0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
146c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
146d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
146e0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
146f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
14700 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14710 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
14720 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
14730 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
14740 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
14750 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14760 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
14770 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
14780 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
14790 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
147a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
147b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
147c0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
147d0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
147e0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
147f0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
14800 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
14810 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
14820 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
14830 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
14840 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
14850 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
14860 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
14870 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
14880 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
14890 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
148a0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
148b0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
148c0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
148d0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
148e0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
148f0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
14900 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
14910 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
14920 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
14930 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
14940 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
14950 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
14960 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
14970 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
14980 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
14990 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
149a0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
149b0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
149c0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
149d0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
149e0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
149f0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
14a00 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
14a10 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
14a20 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
14a30 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
14a40 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
14a50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
14a60 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
14a70 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
14a80 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
14a90 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
14aa0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
14ab0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
14ac0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
14ad0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
14ae0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
14af0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
14b00 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
14b10 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
14b20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
14b30 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
14b40 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
14b50 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
14b60 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
14b70 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
14b80 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
14b90 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
14ba0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
14bb0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
14bc0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
14bd0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
14be0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14bf0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
14c00 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
14c10 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
14c20 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
14c30 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
14c40 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14c50 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
14c60 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
14c70 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
14c80 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
14c90 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
14ca0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14cb0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
14cc0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
14cd0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
14ce0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14cf0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
14d00 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
14d10 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14d20 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
14d30 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
14d40 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
14d50 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
14d60 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
14d70 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
14d80 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
14d90 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
14da0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
14db0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
14dc0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
14dd0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
14de0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
14df0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14e00 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
14e10 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
14e20 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
14e30 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14e40 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
14e50 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
14e60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
14e70 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
14e80 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
14e90 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
14ea0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
14eb0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
14ec0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
14ed0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
14ee0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
14ef0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
14f00 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14f10 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
14f20 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
14f30 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
14f40 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
14f50 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
14f60 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
14f70 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
14f80 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
14f90 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
14fa0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
14fb0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
14fc0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
14fd0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
14fe0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
14ff0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
15000 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
15010 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
15020 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
15030 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
15040 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
15050 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
15060 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
15070 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
15080 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
15090 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
150a0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
150b0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
150c0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
150d0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
150e0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
150f0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
15100 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
15110 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
15120 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
15130 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
15140 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15150 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
15160 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
15170 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
15180 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
15190 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
151a0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
151b0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
151c0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
151d0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
151e0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
151f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
15200 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
15210 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
15220 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
15230 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
15240 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
15250 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
15260 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
15270 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
15280 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
15290 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
152a0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
152b0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
152c0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
152d0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
152e0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
152f0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
15300 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
15310 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
15320 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
15330 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
15340 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
15350 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
15360 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
15370 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
15380 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
15390 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
153a0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
153b0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
153c0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
153d0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
153e0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
153f0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
15400 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
15410 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
15420 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
15430 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
15440 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
15450 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
15460 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
15470 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
15480 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
15490 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
154a0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
154b0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
154c0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
154d0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
154e0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
154f0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
15500 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
15510 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
15520 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
15530 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
15540 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
15550 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
15560 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
15570 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
15580 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15590 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
155a0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
155b0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
155c0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
155d0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
155e0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
155f0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
15600 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
15610 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
15620 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
15630 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
15640 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
15650 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
15660 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
15670 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
15680 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
15690 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
156a0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
156b0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
156c0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
156d0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
156e0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
156f0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
15700 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
15730 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
15740 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
15750 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
15760 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
15770 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
15780 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
15790 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
157a0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
157b0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
157c0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
157d0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
157e0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
157f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
15800 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
15810 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
15820 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
15830 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
15840 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
15850 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
15860 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
15870 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
15880 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
15890 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
158a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
158b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
158c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
158d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
158e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
158f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
15900 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
15910 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
15920 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
15930 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
15940 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
15950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
15990 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
159a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
159b0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
159c0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
159d0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
159e0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
159f0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
15a00 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
15a10 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
15a20 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
15a30 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
15a40 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
15a50 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
15a60 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
15a70 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
15a80 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
15a90 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
15aa0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
15ab0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
15ac0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
15ad0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
15ae0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
15af0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15b00 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15b10 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15b20 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15b30 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
15b40 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
15b50 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
15b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
15ba0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
15bb0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
15bc0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
15bd0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
15be0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
15bf0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
15c00 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
15c10 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
15c20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
15c30 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
15c40 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
15c50 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
15c80 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
15cb0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
15cc0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
15cf0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
15d00 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
15d10 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
15d20 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
15d30 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
15d40 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
15d50 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
15d80 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
15d90 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
15da0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
15db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15dc0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
15dd0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
15de0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
15df0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
15e00 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
15e10 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
15e20 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
15e30 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
15e40 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15e50 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
15e60 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
15e70 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
15ea0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
15eb0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
15ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ed0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
15ee0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
15ef0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
15f00 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15f10 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
15f20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
15f30 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
15f40 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
15f50 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
15f60 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
15f70 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
15f80 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
15f90 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15fa0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
15fb0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
15fc0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
15fd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
15fe0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
15ff0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
16000 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
16010 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
16020 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
16030 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
16040 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
16050 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
16060 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16070 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
16080 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
16090 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
160a0 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
160b0 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
160c0 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
160d0 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
160e0 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
160f0 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
16100 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
16110 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
16120 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
16130 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
16140 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
16150 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
16160 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
16170 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
16180 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
16190 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
161a0 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
161b0 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
161c0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
161d0 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
161e0 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
161f0 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
16200 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
16210 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
16220 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
16230 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
16240 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
16250 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
16260 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
16270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
16280 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
16290 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
162a0 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
162b0 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
162c0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
162d0 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
162e0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
162f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
16300 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
16310 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
16320 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
16330 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
16340 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
16350 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
16360 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
16370 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
16380 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
16390 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
163a0 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
163b0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
163c0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
163d0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
163e0 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
163f0 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
16400 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
16410 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
16420 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
16430 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
16440 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
16450 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
16460 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
16470 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
16480 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
16490 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
164a0 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
164b0 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
164c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
164d0 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
164e0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
164f0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
16500 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
16510 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
16520 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
16530 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
16540 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
16550 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
16560 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
16570 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
16580 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
16590 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
165a0 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
165b0 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
165c0 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
165d0 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
165e0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
165f0 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
16600 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
16610 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
16620 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
16630 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
16640 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
16650 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
16660 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
16670 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
16680 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66   Combinations of
16690 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f   two or more EP_
166a0 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  * flags.*/.#defi
166b0 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
166c0 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
166d0 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70  ubquery) /* Prop
166e0 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73  agate these bits
166f0 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a   up tree */../*.
16700 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
16710 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
16720 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
16730 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
16740 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
16750 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
16760 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
16770 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
16780 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
16790 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
167a0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
167b0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
167c0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
167d0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
167e0 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
167f0 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
16800 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
16810 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
16820 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
16830 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
16840 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
16850 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
16860 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
16870 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
16880 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
16890 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
168a0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
168b0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
168c0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
168d0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
168e0 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
168f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
16900 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
16910 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
16920 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
16930 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
16940 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
16950 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
16960 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
16970 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
16980 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
16990 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
169a0 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
169b0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
169c0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
169d0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
169e0 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
169f0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
16a00 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
16a10 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
16a20 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
16a30 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
16a40 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
16a50 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
16a60 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
16a70 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
16a80 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
16a90 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
16aa0 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
16ab0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
16ac0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
16ad0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
16ae0 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
16af0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
16b00 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
16b10 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
16b20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
16b30 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
16b40 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
16b50 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
16b60 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
16b70 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
16b80 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
16b90 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
16ba0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
16bb0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
16bc0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
16bd0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
16be0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
16bf0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
16c00 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
16c10 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
16c20 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
16c30 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
16c40 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
16c50 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
16c60 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
16c70 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
16c80 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
16c90 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
16ca0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
16cb0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
16cc0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
16cd0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
16ce0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
16cf0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
16d00 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
16d10 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
16d20 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
16d30 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
16d40 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
16d50 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
16d60 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
16d70 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
16d80 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
16d90 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
16da0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
16db0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
16dc0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
16dd0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
16de0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
16df0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
16e00 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
16e10 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
16e20 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
16e30 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
16e40 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
16e50 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
16e60 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
16e70 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
16e80 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
16e90 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
16ea0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
16eb0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
16ec0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
16ed0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
16ee0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
16ef0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
16f00 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
16f10 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
16f20 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
16f30 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
16f40 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
16f50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16f60 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
16f70 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
16f80 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
16f90 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
16fa0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
16fb0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
16fc0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
16fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16fe0 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
16ff0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
17000 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
17010 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
17020 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
17030 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
17040 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
17050 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17060 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
17070 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17080 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
17090 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
170a0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
170b0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
170c0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
170d0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
170e0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
170f0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
17100 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
17110 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
17120 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
17130 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
17140 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
17150 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
17160 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
17170 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
17180 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
17190 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
171a0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
171b0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
171c0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
171d0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
171e0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
171f0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
17200 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
17210 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
17220 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
17230 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
17240 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
17250 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
17260 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
17270 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
17280 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
17290 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
172a0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
172b0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
172c0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
172d0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
172e0 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
172f0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17300 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17310 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
17320 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
17330 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
17340 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
17350 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
17360 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
17370 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
17380 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
17390 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
173a0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
173b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
173c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
173d0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
173e0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
173f0 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
17400 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
17410 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
17420 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
17430 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
17440 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
17450 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
17460 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17470 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
17480 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
17490 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
174a0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
174b0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
174c0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
174d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
174e0 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
174f0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
17500 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
17510 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
17520 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
17530 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
17540 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
17550 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
17560 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
17570 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
17580 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
17590 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
175a0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
175b0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
175c0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
175d0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
175e0 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
175f0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
17600 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
17610 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
17620 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
17630 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
17640 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
17650 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
17660 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
17670 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
17680 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
17690 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
176a0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
176b0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
176c0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
176d0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
176e0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
176f0 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
17700 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
17710 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
17720 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
17730 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
17740 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
17750 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
17760 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
17770 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
17780 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
17790 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
177a0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
177b0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
177c0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
177d0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
177e0 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
177f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
17800 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
17810 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
17820 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
17830 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
17840 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
17850 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
17860 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
17870 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
17880 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
17890 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
178a0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
178b0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
178c0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
178d0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
178e0 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
178f0 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
17900 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
17910 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
17920 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
17930 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
17940 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
17950 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
17960 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
17970 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
17980 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
17990 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
179a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
179b0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
179c0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
179d0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
179e0 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
179f0 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
17a00 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
17a10 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
17a20 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
17a30 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
17a40 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
17a50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
17a60 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
17a70 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
17a80 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
17a90 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
17aa0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
17ab0 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
17ac0 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
17ad0 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
17ae0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
17af0 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
17b00 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
17b10 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
17b20 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
17b30 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
17b40 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
17b50 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
17b60 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
17b70 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
17b80 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
17b90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
17ba0 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
17bb0 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
17bc0 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
17bd0 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
17be0 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
17bf0 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
17c00 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
17c10 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
17c20 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
17c30 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
17c40 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
17c50 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
17c60 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
17c70 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
17c80 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
17c90 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
17ca0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
17cb0 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
17cc0 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
17cd0 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
17ce0 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
17cf0 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
17d00 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
17d10 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
17d20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
17d30 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
17d40 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
17d50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
17d60 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
17d70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
17d80 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
17d90 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
17da0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
17db0 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
17dc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17dd0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
17de0 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
17df0 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
17e00 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
17e10 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
17e20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
17e30 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
17e40 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
17e50 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
17e60 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
17e70 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
17e80 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
17e90 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
17ea0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
17eb0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
17ec0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
17ed0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
17ee0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
17ef0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
17f00 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
17f10 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
17f20 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
17f30 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
17f40 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
17f50 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
17f60 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
17f70 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
17f80 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
17f90 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
17fa0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
17fb0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
17fc0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
17fd0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
17fe0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
17ff0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
18000 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
18010 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
18020 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
18030 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
18040 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
18050 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
18060 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
18070 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
18080 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
18090 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
180a0 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
180b0 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
180c0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
180d0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
180e0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
180f0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
18100 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
18110 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
18120 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
18130 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
18140 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
18150 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
18160 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
18170 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
18180 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
18190 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
181a0 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
181b0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
181c0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
181d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
181e0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
181f0 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
18200 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
18210 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
18220 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
18230 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
18240 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
18250 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
18260 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
18270 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
18280 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
18290 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
182a0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20  OMIT_EXPLAIN.   
182b0 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20   u8 iSelectId;  
182c0 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74     /* If pSelect
182d0 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74  !=0, the id of t
182e0 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e  he sub-select in
182f0 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EQP */.#endif. 
18300 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
18310 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
18320 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
18330 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
18340 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
18350 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
18360 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
18370 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
18380 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
18390 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
183a0 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
183b0 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
183c0 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
183d0 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
183e0 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
183f0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
18400 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
18410 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
18420 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
18430 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
18440 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
18450 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
18460 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
18470 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
18480 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
18490 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
184a0 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
184b0 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
184c0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
184d0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
184e0 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
184f0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
18500 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18510 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
18520 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
18530 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
18540 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
18550 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
18560 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
18570 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
18580 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
18590 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
185a0 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
185b0 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
185c0 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
185d0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
185e0 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
185f0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
18600 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
18610 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
18620 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
18630 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
18640 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
18650 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
18660 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
18670 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
18680 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
18690 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
186a0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
186b0 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
186c0 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
186d0 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
186e0 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
186f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
18700 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
18710 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
18720 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
18730 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
18740 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
18750 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
18760 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
18770 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
18780 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
18790 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
187a0 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
187b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
187c0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
187d0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
187e0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
187f0 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
18800 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
18810 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
18820 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
18830 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
18840 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
18850 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
18860 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
18870 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
18880 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
18890 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
188a0 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
188b0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
188c0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
188d0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
188e0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
188f0 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
18900 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
18910 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
18920 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
18930 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
18940 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
18950 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
18960 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
18970 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
18980 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
18990 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
189a0 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
189b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
189c0 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
189d0 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
189e0 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
189f0 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
18a00 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18a10 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20  _NO_AUTOINDEX   
18a20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61    0x0080 /* Disa
18a30 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69  llow automatic i
18a40 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
18a50 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
18a60 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
18a70 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
18a80 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
18a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18aa0 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
18ab0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
18ac0 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
18ad0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
18ae0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
18af0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
18b00 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
18b10 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
18b20 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
18b30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
18b40 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
18b50 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0800 /* Suppor
18b60 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
18b70 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
18b80 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e  ine WHERE_REOPEN
18b90 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30  _IDX       0x100
18ba0 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20  0 /* Try to use 
18bb0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a  OP_ReopenIdx */.
18bc0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
18bd0 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
18be0 78 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53  x2000 /* ONEPASS
18bf0 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
18c00 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a  iple rows */../*
18c10 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
18c20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
18c30 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
18c40 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
18c50 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
18c60 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
18c70 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
18c80 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
18c90 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
18ca0 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
18cb0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
18cc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18cd0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
18ce0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
18cf0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
18d00 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
18d10 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18d20 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
18d30 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
18d40 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
18d50 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
18d60 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
18d70 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
18d80 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
18d90 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
18da0 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
18db0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
18dc0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
18dd0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
18de0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
18df0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
18e00 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
18e10 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
18e20 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
18e30 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
18e40 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
18e50 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
18e60 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
18e70 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
18e80 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
18e90 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
18ea0 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
18eb0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
18ec0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
18ed0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
18ee0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
18ef0 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
18f00 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
18f10 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
18f20 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
18f30 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
18f40 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
18f50 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
18f60 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
18f70 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
18f80 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
18f90 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
18fa0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
18fb0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
18fc0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
18fd0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
18fe0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
18ff0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
19000 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
19010 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
19020 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
19030 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
19040 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
19050 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
19060 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
19070 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
19080 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
19090 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
190a0 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
190b0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
190c0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
190d0 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
190e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
190f0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
19100 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
19110 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
19120 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
19130 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19140 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
19150 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
19160 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
19170 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
19180 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
19190 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
191a0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
191b0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
191c0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
191d0 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
191e0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
191f0 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
19200 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
19210 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
19220 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
19230 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
19240 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
19250 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
19260 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
19270 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
19280 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
19290 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
192a0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
192b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
192c0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
192d0 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
192e0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
192f0 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
19300 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
19310 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
19320 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
19330 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
19340 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
19350 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19360 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
19370 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
19380 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
19390 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
193a0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
193b0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
193c0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
193d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
193e0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
193f0 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
19400 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
19410 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d  *.** Note:  NC_M
19420 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61  inMaxAgg must ha
19430 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
19440 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67  e as SF_MinMaxAg
19450 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f  g and.** SQLITE_
19460 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20  FUNC_MINMAX..** 
19470 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
19480 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
19490 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
194a0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
194b0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
194c0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
194d0 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20   0x0002  /* One 
194e0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
194f0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
19500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
19510 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
19520 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
19530 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
19540 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
19550 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
19560 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
19570 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
19580 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
19590 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
195a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
195b0 72 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20  rtIdx   0x0010  
195c0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
195d0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
195e0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
195f0 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72  efine NC_IdxExpr
19600 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72     0x0020  /* Tr
19610 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
19620 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54  columns of CREAT
19630 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
19640 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
19650 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
19660 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
19670 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
19680 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ove */../*.** An
19690 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
196a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
196b0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
196c0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
196d0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
196e0 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
196f0 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
19700 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
19710 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
19720 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
19730 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
19740 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
19750 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
19760 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
19770 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
19780 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
19790 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
197a0 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
197b0 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
197c0 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
197d0 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
197e0 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
197f0 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
19800 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
19810 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
19820 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
19830 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
19840 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
19850 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
19860 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
19870 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
19880 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
19890 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
198a0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
198b0 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
198c0 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
198d0 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
198e0 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
198f0 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
19900 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
19910 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
19920 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
19930 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
19940 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
19950 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
19960 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
19970 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
19980 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
19990 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
199a0 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
199b0 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
199c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
199d0 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
199e0 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
199f0 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
19a00 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
19a10 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
19a20 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
19a30 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
19a40 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
19a50 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
19a60 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
19a70 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
19a80 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
19a90 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
19aa0 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
19ab0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
19ac0 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
19ad0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
19ae0 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
19af0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
19b00 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
19b10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
19b20 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
19b30 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
19b40 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
19b50 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20    u16 selFlags; 
19b60 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
19b70 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
19b80 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
19b90 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
19ba0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
19bb0 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
19bc0 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
19bd0 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
19be0 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
19bf0 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
19c00 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
19c10 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
19c20 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
19c30 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
19c40 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
19c50 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
19c60 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
19c70 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
19c80 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
19c90 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
19ca0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
19cb0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
19cc0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
19cd0 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
19ce0 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
19cf0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
19d00 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
19d10 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
19d20 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
19d30 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
19d40 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
19d50 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
19d60 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
19d70 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
19d80 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
19d90 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
19da0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
19db0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
19dc0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
19dd0 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
19de0 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
19df0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
19e00 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
19e10 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
19e20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
19e30 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
19e40 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
19e50 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
19e60 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
19e70 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
19e80 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
19e90 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
19ea0 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
19eb0 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
19ec0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
19ed0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
19ee0 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
19ef0 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
19f00 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
19f10 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
19f20 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
19f30 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
19f40 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
19f50 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
19f60 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
19f70 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
19f80 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
19f90 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
19fa0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
19fb0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
19fc0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
19fd0 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
19fe0 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
19ff0 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1a000 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1a010 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1a020 64 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  d        0x0004 
1a030 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1a040 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1a050 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1a060 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1a070 20 30 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74   0x0008  /* Cont
1a080 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1a090 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1a0a0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1a0b0 65 72 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f  eral   0x0010  /
1a0c0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1a0d0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1a0e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1a0f0 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
1a100 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0020  /* sqlite3
1a110 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1a120 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1a130 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1a140 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
1a150 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  40  /* FROM subq
1a160 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1a170 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1a180 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1a190 64 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20  d        0x0080 
1a1a0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1a1b0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1a1c0 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1a1d0 73 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  s          0x010
1a1e0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1a1f0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1a200 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1a210 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1a220 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69     0x0200  /* Si
1a230 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1a240 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1a250 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1a260 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1a270 20 20 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72    0x0400  /* Par
1a280 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1a290 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1a2a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1a2b0 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30  aybeConvert    0
1a2c0 78 30 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  x0800  /* Need c
1a2d0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1a2e0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1a2f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1a300 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
1a310 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
1a320 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1a330 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1a340 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1a350 72 73 69 76 65 20 20 20 20 20 20 20 30 78 32 30  rsive       0x20
1a360 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1a370 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1a380 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1a390 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1a3a0 72 74 65 64 20 20 20 20 20 20 20 30 78 34 30 30  rted       0x400
1a3b0 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1a3c0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1a3d0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a  Subquery() */...
1a3e0 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1a3f0 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1a400 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1a410 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a420 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1a430 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1a440 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1a450 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1a460 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1a470 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1a480 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1a490 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1a4a0 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1a4b0 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1a4c0 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20   index .**      
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a4e0 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1a4f0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1a500 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1a510 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1a520 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1a530 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1a540 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1a550 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1a560 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1a570 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1a580 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1a590 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1a5a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a5b0 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1a5c0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1a5d0 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1a5e0 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1a5f0 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1a600 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1a610 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1a620 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1a630 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1a640 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1a650 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1a680 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1a690 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1a6a0 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1a6b0 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1a6c0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1a6d0 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1a6e0 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1a6f0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1a700 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1a710 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1a720 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1a730 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1a740 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1a750 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a760 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1a770 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1a780 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1a790 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1a7a0 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1a7b0 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1a7c0 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1a7d0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1a7f0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1a800 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1a810 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1a840 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1a850 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1a860 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1a870 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1a880 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1a890 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1a8a0 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1a8b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1a8c0 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1a8d0 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1a8e0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1a8f0 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1a920 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1a930 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1a940 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  . .**           
1a950 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1a960 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1a970 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1a980 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1a9b0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1a9c0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1a9d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1a9e0 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1a9f0 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1aa00 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1aa10 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1aa40 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1aa50 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1aa60 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1aa80 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1aa90 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1aaa0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1aad0 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1aae0 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1aaf0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1ab00 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1ab10 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1ab20 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1ab30 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1ab40 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1ab50 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1ab60 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ab80 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1ab90 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1aba0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1abd0 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1abe0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1abf0 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1ac20 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1ac30 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1ac40 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1ac70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1ac80 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1ac90 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1aca0 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1acb0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1acc0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1acd0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1ace0 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1acf0 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1ad00 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1ad10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ad20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1ad30 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1ad40 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1ad50 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1ad60 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1ad70 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1ad80 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1ad90 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1adc0 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1add0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1ade0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1adf0 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1ae00 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1ae10 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1ae20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1ae30 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1ae40 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1ae50 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1ae80 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1ae90 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1aea0 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1aed0 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1aee0 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1aef0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1af00 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1af10 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1af20 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1af30 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1af50 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1af60 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1af70 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1af80 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1afa0 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1afb0 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1afc0 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1afd0 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1afe0 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1aff0 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1b020 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1b030 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1b040 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1b060 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1b070 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1b080 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1b090 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1b0a0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1b0b0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1b0c0 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1b0d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b0e0 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1b0f0 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1b100 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1b110 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1b120 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1b130 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1b140 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1b150 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1b160 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1b170 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1b180 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1b190 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1b1a0 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1b1b0 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1b1c0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1b1d0 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1b1e0 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1b1f0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1b200 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1b210 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1b220 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1b230 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1b240 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1b250 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1b260 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1b270 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1b280 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1b290 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1b2a0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1b2b0 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1b2c0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1b2d0 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1b2e0 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1b2f0 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1b300 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1b310 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1b320 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1b330 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1b340 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1b350 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1b360 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1b370 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1b380 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1b390 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1b3a0 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1b3b0 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1b3c0 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1b3d0 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1b3e0 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1b3f0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1b400 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1b410 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1b420 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1b430 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1b440 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1b450 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1b460 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1b470 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1b480 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1b490 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1b4a0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1b4b0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1b4c0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1b4d0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1b4e0 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1b4f0 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1b500 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1b510 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1b520 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b530 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1b540 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1b550 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1b560 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1b570 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1b580 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1b590 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1b5a0 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1b5b0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1b5c0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1b5d0 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1b5e0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1b5f0 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1b600 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1b610 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1b620 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1b630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1b640 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1b650 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1b660 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1b670 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1b680 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1b690 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1b6a0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1b6b0 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1b6c0 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1b6d0 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1b6e0 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1b6f0 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1b700 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1b710 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1b720 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1b730 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
1b740 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1b750 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1b760 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1b770 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1b780 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1b790 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1b7a0 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1b7b0 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1b7c0 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1b7d0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1b7e0 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1b7f0 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1b800 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1b810 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1b820 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1b830 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1b840 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
1b850 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1b860 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1b870 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1b880 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1b890 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1b8a0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1b8b0 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1b8c0 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1b8d0 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1b8e0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1b8f0 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1b900 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1b910 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1b920 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1b930 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1b940 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1b950 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1b960 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1b970 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1b980 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1b990 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1b9a0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1b9b0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1b9c0 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1b9d0 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1b9e0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1b9f0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1ba00 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1ba10 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
1ba20 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
1ba30 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
1ba40 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
1ba50 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
1ba60 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
1ba70 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1ba80 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1ba90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1baa0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bab0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1bac0 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
1bad0 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1bae0 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1baf0 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1bb00 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1bb10 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1bb20 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1bb30 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1bb40 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1bb50 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1bb60 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1bb70 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1bb80 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1bb90 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1bba0 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1bbb0 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1bbc0 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1bbd0 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1bbe0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1bbf0 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1bc00 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1bc10 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1bc20 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1bc30 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1bc40 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1bc50 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1bc60 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1bc70 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1bc80 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1bc90 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1bca0 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1bcb0 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1bcc0 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1bcd0 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1bce0 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1bcf0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1bd00 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1bd10 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1bd20 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bd30 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1bd40 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1bd50 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1bd60 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1bd70 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
1bd80 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1bd90 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1bda0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1bdb0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1bdc0 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1bdd0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1bde0 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1bdf0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1be00 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1be10 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1be20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1be30 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1be40 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1be50 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1be60 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1be70 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1be80 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1be90 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1bea0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1beb0 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1bec0 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1bed0 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1bee0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1bef0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1bf00 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1bf10 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1bf20 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1bf30 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1bf40 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1bf50 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1bf60 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1bf70 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1bf80 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1bf90 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1bfa0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1bfb0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1bfc0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1bfd0 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1bfe0 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1bff0 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1c000 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1c010 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1c020 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1c030 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1c040 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1c050 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1c060 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1c070 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1c080 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1c090 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1c0a0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1c0b0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1c0c0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1c0d0 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1c0e0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1c0f0 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1c100 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1c110 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1c120 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1c130 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1c140 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1c150 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1c160 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1c170 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1c180 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1c190 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1c1a0 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1c1b0 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1c1c0 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1c1d0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1c1e0 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1c1f0 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1c200 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1c210 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1c220 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1c230 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1c240 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1c250 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1c260 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1c270 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1c280 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1c290 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1c2a0 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1c2b0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1c2c0 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1c2d0 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1c2e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1c2f0 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1c300 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1c310 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1c320 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1c330 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1c340 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1c350 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1c360 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1c370 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1c380 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1c390 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1c3a0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1c3b0 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1c3c0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1c3d0 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1c3e0 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1c3f0 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1c400 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1c410 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
1c420 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1c430 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1c440 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1c450 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1c460 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1c470 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1c480 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1c490 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1c4a0 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1c4b0 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1c4c0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1c4d0 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1c4e0 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1c4f0 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1c500 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1c510 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1c520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c530 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1c540 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1c550 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1c560 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1c570 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1c580 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1c590 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1c5a0 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1c5b0 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1c5c0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1c5d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1c5e0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1c5f0 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1c600 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1c610 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1c620 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1c630 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1c640 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1c650 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1c660 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1c670 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1c680 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1c690 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1c6a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c6b0 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1c6c0 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1c6d0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c6e0 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1c6f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c700 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1c710 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1c720 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1c730 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1c740 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1c750 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1c760 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1c770 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1c780 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1c790 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1c7a0 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1c7b0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1c7c0 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1c7d0 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1c7e0 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1c7f0 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1c800 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1c810 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1c820 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1c830 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1c840 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  stants */.  int 
1c850 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
1c860 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
1c870 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
1c880 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
1c890 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1c8a0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1c8b0 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1c8c0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1c8d0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1c8e0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1c8f0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1c900 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1c910 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1c920 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c930 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1c940 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1c950 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1c960 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1c970 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1c980 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1c990 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1c9a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c9b0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1c9c0 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1c9d0 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
1c9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c9f0 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
1ca00 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1ca10 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
1ca20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
1ca30 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
1ca40 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
1ca50 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1ca60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ca70 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1ca80 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1ca90 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f  */.  int iFixedO
1caa0 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76  p;        /* Nev
1cab0 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f  er back out opco
1cac0 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f  des iFixedOp-1 o
1cad0 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69  r earlier */.  i
1cae0 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
1caf0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1cb00 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
1cb10 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
1cb20 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
1cb30 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
1cb40 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69  /* Table of an i
1cb50 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73  ndex whose exprs
1cb60 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1cb70 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1cb80 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1cb90 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1cba0 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1cbb0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1cbc0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1cbd0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1cbe0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1cbf0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1cc00 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1cc10 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1cc20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cc30 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1cc40 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1cc50 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1cc60 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1cc70 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1cc80 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1cc90 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1cca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1ccb0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1ccc0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1ccd0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1cce0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1ccf0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1cd00 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1cd10 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1cd20 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1cd30 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1cd40 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1cd50 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1cd60 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1cd70 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1cd80 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1cd90 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1cda0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1cdb0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1cdc0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1cde0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1cdf0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1ce00 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1ce10 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1ce20 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1ce30 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1ce40 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1ce50 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1ce60 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1ce70 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1ce80 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1ce90 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1cea0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1ceb0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1cec0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1ced0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1cee0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1cef0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1cf00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1cf10 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1cf20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1cf30 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1cf40 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1cf50 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1cf60 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1cf70 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1cf80 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1cf90 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1cfa0 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1cfb0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1cfc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1cfd0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1cfe0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1cff0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1d000 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1d010 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1d020 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1d030 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1d040 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1d050 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1d060 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1d070 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1d080 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1d090 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1d0a0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1d0b0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1d0c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d0d0 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1d0e0 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1d0f0 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1d100 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1d110 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1d120 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1d130 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1d140 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1d150 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1d160 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1d170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d180 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1d190 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1d1a0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1d1b0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1d1c0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1d1d0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1d1e0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1d1f0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1d200 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1d210 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1d220 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1d230 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1d240 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1d250 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1d260 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1d270 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1d280 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1d290 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1d2a0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1d2b0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1d2c0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1d2d0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1d2e0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1d2f0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1d300 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1d310 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1d320 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1d330 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1d340 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1d350 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1d360 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1d370 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1d380 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1d390 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1d3a0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1d3b0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1d3c0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1d3d0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1d3e0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1d3f0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1d400 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1d410 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1d420 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1d430 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1d440 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1d450 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1d460 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1d470 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1d480 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1d490 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1d4a0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1d4b0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1d4c0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1d4d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d4e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d4f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d510 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
1d520 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
1d530 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
1d540 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
1d550 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
1d560 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
1d570 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
1d580 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
1d590 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
1d5a0 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
1d5b0 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
1d5c0 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65  rse,nVar) so the
1d5d0 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74   nVar field must
1d5e0 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69   be the first fi
1d5f0 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20  eld.  ** in the 
1d600 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1d610 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1d620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1d660 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
1d670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d680 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1d690 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1d6a0 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1d6b0 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1d6d0 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
1d6e0 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
1d6f0 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  r[] */.  u8 iPkS
1d700 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
1d710 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
1d720 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
1d730 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
1d740 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1d750 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1d760 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1d770 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1d780 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1d790 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d7a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1d7b0 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1d7c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d7d0 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1d7e0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1d7f0 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1d800 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1d810 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d820 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1d830 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1d840 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d860 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1d870 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1d880 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1d890 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1d8a0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1d8b0 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1d8c0 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1d8d0 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1d8e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1d8f0 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1d900 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1d910 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1d920 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1d930 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1d940 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1d950 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1d960 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1d970 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1d980 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1d990 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1d9a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d9b0 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1d9c0 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1d9d0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1d9e0 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1d9f0 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1da00 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1da10 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1da20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1da30 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1da40 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1da50 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1da60 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1da70 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1da80 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1da90 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1daa0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1dab0 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1dac0 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1dad0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1dae0 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1daf0 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1db00 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1db10 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1db20 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1db30 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1db40 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1db50 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1db60 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1db70 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1db80 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1db90 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1dba0 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1dbb0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1dbc0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1dbd0 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1dbe0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1dbf0 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1dc00 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1dc10 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1dc20 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1dc30 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1dc40 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1dc50 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1dc60 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1dc70 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1dc80 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1dc90 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1dca0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1dcb0 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1dcc0 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1dcd0 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1dce0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1dcf0 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1dd00 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1dd10 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1dd20 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1dd40 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1dd50 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1dd60 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
1dd70 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
1dd80 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
1dd90 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
1dda0 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d  f the parse */.}
1ddb0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1ddc0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1ddd0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1dde0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1ddf0 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1de00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1de10 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1de20 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1de30 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1de40 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1de50 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1de60 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1de70 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1de80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1de90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1dea0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1deb0 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1dec0 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1ded0 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1dee0 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1def0 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1df00 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1df10 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1df20 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1df30 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1df40 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1df50 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1df60 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1df70 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1df90 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1dfa0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1dfb0 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1dfc0 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1dfd0 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1dfe0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1dff0 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1e000 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1e010 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1e020 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1e030 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1e040 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1e050 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1e060 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1e070 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1e080 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1e090 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1e0a0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1e0b0 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1e0c0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1e0d0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1e0e0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1e0f0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1e100 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1e110 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1e120 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1e130 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1e140 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1e150 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e160 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1e170 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1e180 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1e190 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1e1a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e1b0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1e1c0 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1e1d0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1e1e0 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1e1f0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1e200 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1e210 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1e220 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1e230 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1e240 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1e250 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1e260 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1e270 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1e280 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1e290 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1e2a0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1e2b0 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1e2c0 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1e2d0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1e2e0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1e2f0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
1e300 5f 4f 70 65 6e 20 69 73 20 6f 70 65 6e 69 6e 67  _Open is opening
1e310 20 66 6f 72 2d 64 65 6c 65 74 65 20 63 73 72 20   for-delete csr 
1e320 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e330 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
1e340 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
1e350 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
1e360 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
1e370 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e380 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
1e390 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1e3a0 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
1e3b0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
1e3c0 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1e3d0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1e3e0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1e3f0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1e400 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1e410 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1e420 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
1e430 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
1e440 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
1e450 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
1e460 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
1e470 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
1e480 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
1e490 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
1e4a0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
1e4b0 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
1e4c0 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1e4d0 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1e4e0 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1e4f0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1e500 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1e510 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1e520 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1e530 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1e540 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1e550 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1e560 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1e570 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1e580 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1e590 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1e5a0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1e5b0 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1e5c0 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1e5d0 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1e5e0 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1e5f0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1e600 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1e610 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1e620 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1e630 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1e640 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1e650 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1e660 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1e670 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1e680 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1e690 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1e6a0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1e6b0 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1e6c0 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1e6f0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1e700 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1e710 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1e720 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1e730 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e750 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1e760 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1e770 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1e780 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e7a0 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1e7b0 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1e7c0 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1e7d0 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1e7e0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1e7f0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1e800 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1e810 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1e820 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1e830 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1e840 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1e850 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1e860 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1e890 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1e8a0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1e8b0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1e8c0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1e8d0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1e8e0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1e8f0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1e900 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1e910 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1e920 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1e930 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1e940 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1e950 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1e960 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1e970 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1e980 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1e990 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1e9a0 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1e9b0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1e9c0 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1e9d0 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1e9e0 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1e9f0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1ea00 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1ea10 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
1ea20 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1ea30 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1ea40 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1ea50 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1ea60 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1ea70 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1ea80 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1ea90 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1eaa0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1eab0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1eac0 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1ead0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1eae0 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1eaf0 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1eb00 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1eb10 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1eb20 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1eb30 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1eb40 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1eb50 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
1eb60 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1eb70 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1eb80 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1eb90 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1eba0 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1ebb0 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1ebc0 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1ebd0 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1ebe0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1ebf0 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
1ec00 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
1ec10 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
1ec20 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1ec30 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
1ec40 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
1ec50 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
1ec60 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1ec70 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
1ec80 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
1ec90 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1eca0 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
1ecb0 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
1ecc0 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
1ecd0 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
1ece0 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
1ecf0 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
1ed00 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
1ed10 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
1ed20 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1ed30 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1ed40 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1ed50 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1ed60 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1ed70 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1ed80 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1ed90 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1eda0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1edb0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1edc0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1edd0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1ede0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1edf0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1ee00 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1ee10 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1ee20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1ee30 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1ee40 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1ee50 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1ee60 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1ee70 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1ee80 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1ee90 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1eea0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1eeb0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1eec0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1eed0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1eee0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1eef0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1ef00 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1ef10 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1ef20 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1ef30 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1ef40 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1ef50 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1ef60 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1ef70 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1ef80 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1ef90 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
1efa0 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1efb0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1efc0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
1efd0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
1efe0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1eff0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
1f000 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
1f010 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1f020 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1f030 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1f040 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
1f050 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
1f060 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1f070 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1f080 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1f090 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
1f0a0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1f0b0 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1f0c0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1f0d0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1f0e0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1f0f0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1f100 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1f110 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1f120 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1f130 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1f140 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1f150 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f160 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1f170 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1f180 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1f190 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1f1a0 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1f1b0 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1f1c0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1f1d0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1f1e0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1f1f0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1f200 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1f210 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1f220 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1f230 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1f240 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1f250 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1f260 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1f270 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1f280 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1f290 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1f2a0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1f2b0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
1f2c0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1f2d0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
1f2e0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
1f2f0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
1f300 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
1f310 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
1f320 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1f330 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1f340 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1f350 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1f360 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1f370 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1f380 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1f390 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1f3a0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1f3b0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1f3c0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1f3d0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1f3e0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1f3f0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1f400 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1f410 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1f420 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1f430 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1f440 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1f450 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1f460 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1f470 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1f480 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1f490 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1f4a0 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1f4b0 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1f4c0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1f4d0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1f4e0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1f4f0 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1f500 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1f510 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1f520 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1f530 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1f540 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1f550 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1f560 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1f570 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1f580 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1f590 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1f5a0 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1f5b0 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1f5c0 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1f5d0 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1f5e0 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1f5f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f600 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1f610 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1f620 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1f630 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1f640 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1f650 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1f660 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1f670 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1f680 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1f690 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1f6a0 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1f6b0 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1f6c0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1f6d0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1f6e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1f6f0 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1f700 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1f710 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1f720 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1f730 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1f740 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1f750 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1f760 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1f770 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1f780 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1f790 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
1f7a0 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
1f7b0 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
1f7c0 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
1f7d0 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
1f7e0 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
1f7f0 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
1f800 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
1f810 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
1f820 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
1f830 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
1f840 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
1f850 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
1f860 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
1f870 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1f880 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
1f890 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
1f8a0 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
1f8b0 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
1f8c0 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
1f8d0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
1f8e0 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
1f8f0 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
1f900 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
1f910 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1f920 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1f930 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1f940 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66  OOBIG */.};.#def
1f950 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
1f960 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
1f970 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
1f980 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  2../*.** A point
1f990 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
1f9a0 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
1f9b0 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
1f9c0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
1f9d0 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
1f9e0 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
1f9f0 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
1fa00 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
1fa10 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
1fa20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1fa30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
1fa40 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
1fa50 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
1fa60 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
1fa70 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1fa80 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
1fa90 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1faa0 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
1fab0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1fac0 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
1fad0 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
1fae0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1faf0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1fb00 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
1fb10 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
1fb20 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
1fb30 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
1fb40 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
1fb50 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
1fb60 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
1fb70 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
1fb80 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
1fb90 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
1fba0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1fbb0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
1fbc0 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
1fbd0 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
1fbe0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1fbf0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
1fc00 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
1fc10 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fc30 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1fc40 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
1fc50 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
1fc60 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1fc70 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1fc80 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
1fc90 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1fca0 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fcc0 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
1fcd0 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
1fce0 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
1fcf0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
1fd00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
1fd10 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
1fd20 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
1fd30 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
1fd40 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
1fd50 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1fd60 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
1fd70 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
1fd80 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
1fd90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1fda0 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
1fdb0 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
1fdc0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1fdf0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1fe00 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1fe10 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1fe20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1fe30 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1fe40 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1fe50 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1fe60 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1fe70 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1fe80 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1fe90 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1fea0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1feb0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1fec0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1fed0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1fee0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1fef0 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1ff00 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1ff10 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1ff20 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1ff30 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1ff60 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1ff70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ff90 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1ffa0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1ffb0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1ffc0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1ffd0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1ffe0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1fff0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
20000 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
20010 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
20020 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
20030 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
20040 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
20050 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
20060 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
20070 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
20080 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
20090 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
200a0 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
200b0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
200e0 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
200f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
20100 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
20110 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20120 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
20130 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
20140 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
20150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
20160 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
20170 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
20180 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20190 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
201a0 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
201b0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
201c0 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
201e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
201f0 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
20200 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
20210 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
20220 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
20230 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
20240 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
20250 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
20260 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
20270 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
20280 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
20290 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a  bled */.  u32 sz
202a0 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pma;            
202b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
202c0 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d  aximum Sorter PM
202d0 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54  A size */.  /* T
202e0 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
202f0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
20300 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
20310 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
20320 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
20330 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
20340 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
20350 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
20380 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
20390 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
203a0 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
203d0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
203e0 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
203f0 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
20420 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
20430 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
20440 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20460 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
20470 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
20480 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
20490 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
204a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
204b0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
204c0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
204d0 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
204e0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
204f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20500 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
20510 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
20520 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
20530 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
20540 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
20550 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
20560 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
20570 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
20580 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
20590 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
205a0 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
205b0 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
205d0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
205e0 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
205f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20600 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
20610 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
20620 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
20630 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
20640 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
20650 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
20660 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
20670 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
20680 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
20690 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
206a0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
206b0 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
206c0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
206d0 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
206e0 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
206f0 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
20700 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
20710 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
20720 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
20730 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
20740 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
20750 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
20760 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
207a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
207b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
207c0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e  UILTIN_TEST.  in
207d0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
207e0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
207f0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
20800 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
20810 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
20820 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20840 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
20850 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
20860 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
20870 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
20880 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
20890 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
208a0 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
208b0 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
208c0 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
208d0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
208e0 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
208f0 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
20900 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
20910 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
20920 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
20930 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
20940 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
20950 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
20960 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
20970 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
20980 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
20990 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
209a0 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
209b0 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
209c0 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
209d0 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
209e0 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
209f0 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
20a00 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
20a10 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
20a20 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
20a30 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
20a40 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
20a50 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
20a60 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
20a70 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
20a80 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
20a90 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
20aa0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
20ab0 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
20ac0 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
20ad0 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
20ae0 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
20af0 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
20b00 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
20b10 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
20b20 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72   {.  int (*xExpr
20b30 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
20b40 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
20b50 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
20b60 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
20b70 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
20b80 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
20b90 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
20ba0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
20bb0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
20bc0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
20bd0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
20be0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
20bf0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
20c00 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
20c10 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20c30 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
20c40 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  .  */.  int walk
20c50 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
20c80 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
20c90 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
20cc0 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
20cd0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d00 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
20d10 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
20d20 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
20d30 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
20d60 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72      /* A counter
20da0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72   */.    int iCur
20db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dd0 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
20de0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
20df0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
20e20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
20e30 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
20e40 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
20e50 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
20e60 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
20e70 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74  rences */.    st
20e80 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70  ruct CCurHint *p
20e90 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20  CCurHint;       
20ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
20eb0 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
20ec0 6e 74 28 29 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  nt() */.  } u;.}
20ed0 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
20ee0 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
20ef0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
20f00 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
20f10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20f20 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
20f30 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
20f40 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20f50 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
20f60 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
20f70 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
20f80 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
20f90 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20fa0 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
20fb0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20fc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
20fd0 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
20fe0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a  r*, Expr*);../*.
20ff0 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
21000 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
21010 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
21020 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
21030 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
21040 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
21050 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
21060 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
21070 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
21080 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
21090 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
210a0 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
210b0 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
210c0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
210d0 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
210e0 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
210f0 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
21100 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
21110 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
21120 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
21130 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
21140 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
21150 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
21160 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
21170 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
21180 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
21190 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
211a0 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
211d0 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
211e0 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
211f0 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
21200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
21210 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
21220 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
21230 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
21260 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
21270 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
21280 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
212b0 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
212c0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
212d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
212e0 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
212f0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
21300 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
21310 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21330 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
21340 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
21350 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
21360 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
21370 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
21380 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
21390 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
213a0 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
213b0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
213c0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
213d0 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
213e0 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
213f0 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
21400 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
21410 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
21420 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
21430 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
21440 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
21450 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
21460 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
21470 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
21480 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
21490 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
214a0 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
214b0 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
214c0 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
214d0 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
214e0 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
214f0 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
21500 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
21510 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
21520 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
21530 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
21540 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
21550 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
21560 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
21570 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
21580 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
21590 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
215a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
215b0 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
215e0 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
215f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
21600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
21610 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
21620 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
21630 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
21640 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21680 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
21690 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
216a0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
216b0 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
216c0 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
216d0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
216e0 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
216f0 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
21700 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
21710 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
21720 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
21730 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
21740 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
21750 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
21760 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
21770 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
21780 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
21790 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
217a0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
217b0 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
217c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
217d0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
217e0 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
217f0 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
21800 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
21810 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
21820 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
21830 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
21840 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
21850 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
21860 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
21870 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
21880 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
21890 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
218a0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
218b0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
218c0 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
218d0 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
218e0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
218f0 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
21900 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
21910 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
21920 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
21930 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
21940 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
21950 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
21960 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
21970 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
21980 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
21990 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
219a0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
219b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
219c0 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
219d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
219e0 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
219f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
21a00 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
21a10 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
21a20 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
21a30 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
21a40 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
21a50 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
21a60 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
21a70 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
21a80 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
21a90 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21aa0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
21ab0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
21ac0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
21ad0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
21ae0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
21af0 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
21b00 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
21b10 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
21b20 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
21b30 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
21b40 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
21b50 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
21b60 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
21b70 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
21b80 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
21b90 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
21ba0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
21bb0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
21bc0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
21bd0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
21be0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
21bf0 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
21c00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
21c10 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
21c20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
21c30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21c40 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
21c50 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
21c60 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
21c70 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21c80 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
21c90 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
21ca0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
21cb0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
21cc0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
21cd0 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
21ce0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
21cf0 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
21d00 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21d10 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
21d20 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
21d30 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
21d40 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
21d50 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
21d60 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
21d70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
21d80 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
21d90 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21da0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
21db0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
21dc0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
21dd0 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
21de0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
21df0 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
21e00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21e10 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
21e20 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
21e30 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
21e40 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
21e50 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
21e60 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21e70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21e80 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
21e90 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
21ea0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
21eb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
21ec0 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
21ed0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21ee0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
21ef0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
21f00 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
21f10 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
21f20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
21f30 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
21f40 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
21f50 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
21f60 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
21f70 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
21f80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
21f90 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
21fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
21fb0 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
21fc0 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
21fd0 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
21fe0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
21ff0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
22000 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
22010 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
22020 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
22030 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
22040 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
22050 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
22060 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
22070 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
22080 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
22090 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
220a0 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
220b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
220c0 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
220d0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
220e0 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
220f0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
22100 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
22110 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
22120 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
22130 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68  lite3*, u64);.ch
22140 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
22150 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
22160 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
22170 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
22180 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
22190 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f   char*, u64);.vo
221a0 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
221b0 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a  oc(void*, u64);.
221c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
221d0 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
221e0 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
221f0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
22200 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
22210 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
22220 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u64);.void sqlit
22230 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
22240 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
22250 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
22260 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
22270 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
22280 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
22290 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
222a0 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
222b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
222c0 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
222d0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
222e0 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
222f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
22300 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
22310 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
22320 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
22330 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22340 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
22350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
22360 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
22370 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
22380 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
22390 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
223a0 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
223b0 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
223c0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
223d0 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
223e0 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
223f0 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
22400 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
22410 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
22420 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
22430 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
22440 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
22450 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
22460 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
22470 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
22480 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
22490 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
224a0 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
224b0 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
224c0 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
224d0 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
224e0 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
224f0 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
22500 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
22510 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
22520 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
22530 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
22540 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
22550 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
22560 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
22570 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
22580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22590 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
225a0 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20         .#else.# 
225b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
225c0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
225d0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
225e0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
225f0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
22600 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
22610 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
22620 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
22630 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
22640 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
22650 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
22660 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
22670 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
22680 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
22690 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
226a0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
226b0 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
226c0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
226d0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
226e0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
226f0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
22700 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
22710 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
22720 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22730 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
22740 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
22750 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
22760 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
22770 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
22780 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
22790 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
227a0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
227b0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
227c0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
227d0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
227e0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
227f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22800 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
22810 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
22820 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
22830 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
22840 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
22850 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
22860 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
22870 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
22880 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
22890 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
228a0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
228b0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
228c0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
228d0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
228e0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
228f0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
22900 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
22910 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
22920 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
22930 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73   int);../* Acces
22940 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
22950 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
22960 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
22970 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
22980 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
22990 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
229a0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
229b0 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
229c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
229d0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
229e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
229f0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
22a00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22a10 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
22a20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
22a30 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
22a40 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
22a50 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
22a60 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
22a70 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
22a80 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
22a90 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
22aa0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
22ab0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
22ac0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
22ad0 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22af0 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
22b00 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
22b10 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
22b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
22b30 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
22b40 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
22b50 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
22b60 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
22b70 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
22b80 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
22b90 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
22ba0 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
22bb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
22bc0 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
22bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
22be0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
22bf0 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
22c00 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
22c10 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
22c20 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
22c30 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
22c40 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
22c50 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
22c60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
22c70 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
22c80 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
22c90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22ca0 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
22cb0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
22cc0 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
22cd0 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
22ce0 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
22cf0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
22d00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
22d10 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
22d20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
22d30 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
22d40 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
22d50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
22d60 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
22d70 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
22d80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
22d90 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
22da0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
22db0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
22dc0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
22dd0 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
22de0 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
22df0 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  *, u8, const cha
22e00 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
22e10 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
22e20 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
22e30 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
22e40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
22e50 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
22e60 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
22e70 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  h*, u8);.#endif.
22e80 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
22e90 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
22ea0 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
22eb0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
22ec0 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
22ed0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22ee0 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
22ef0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
22f00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
22f10 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
22f20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
22f30 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22f40 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
22f50 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
22f60 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
22f70 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
22f80 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
22f90 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
22fa0 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
22fb0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
22fc0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
22fd0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
22fe0 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
22ff0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
23000 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
23010 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
23020 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23030 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
23040 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78  ache(Parse*);.Ex
23050 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
23060 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
23070 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
23080 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
23090 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
230a0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
230b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
230c0 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
230d0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
230e0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
230f0 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
23100 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
23110 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  pr*, Expr*, cons
23120 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
23130 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
23140 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
23150 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
23160 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
23170 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
23180 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
23190 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
231a0 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
231b0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
231c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
231d0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
231e0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
231f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
23200 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
23210 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  rList*,Expr*);.v
23220 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
23230 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28  istSetSortOrder(
23240 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
23250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23260 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
23270 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
23280 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
23290 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
232a0 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
232b0 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
232c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
232d0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
232e0 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
232f0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
23300 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
23310 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
23320 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
23330 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
23340 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
23350 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
23360 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
23370 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
23380 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
23390 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
233a0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
233b0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
233c0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
233d0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
233e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
233f0 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
23400 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
23410 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
23420 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
23430 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
23440 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
23450 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
23460 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
23470 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
23480 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
23490 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e  te3DeleteColumnN
234a0 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61  ames(sqlite3*,Ta
234b0 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
234c0 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70  e3ColumnsFromExp
234d0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70  rList(Parse*,Exp
234e0 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75  rList*,i16*,Colu
234f0 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  mn**);.Table *sq
23500 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
23510 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
23520 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
23530 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
23540 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
23550 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
23560 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
23570 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
23580 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
23590 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
235a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
235b0 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
235c0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
235d0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  ,int,int,int);.v
235e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
235f0 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
23600 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
23610 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  mn*);.void sqlit
23620 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
23630 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
23640 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
23650 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
23660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
23670 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
23680 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
23690 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
236a0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
236b0 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
236c0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
236d0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
236e0 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
236f0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
23700 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
23710 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
23720 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
23730 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
23740 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
23750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
23760 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
23770 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
23780 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
23790 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
237a0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
237b0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
237c0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
237d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
237e0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
237f0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
23800 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
23810 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
23820 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
23830 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
23840 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
23850 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
23860 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
23870 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
23880 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
23890 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
238a0 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
238b0 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
238c0 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
238d0 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
238e0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
238f0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
23900 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
23910 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
23920 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
23930 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
23940 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
23950 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
23960 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
23970 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
23980 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
23990 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
239a0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
239b0 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
239c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
239d0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
239e0 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  ST.int sqlite3Bi
239f0 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
23a00 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69  int,int*);.#endi
23a10 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  f..RowSet *sqlit
23a20 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
23a30 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
23a40 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
23a50 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
23a60 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
23a70 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
23a80 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
23a90 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
23aa0 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
23ab0 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
23ac0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
23ad0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
23ae0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
23af0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
23b00 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
23b10 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
23b20 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
23b30 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
23b40 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23b50 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
23b60 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23b70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23b80 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
23b90 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
23ba0 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
23bb0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
23bc0 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
23bd0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
23be0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
23bf0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
23c00 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
23c10 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
23c20 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
23c30 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
23c40 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
23c50 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
23c60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23c70 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
23c80 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23c90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23ca0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
23cb0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
23cc0 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
23cd0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
23ce0 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
23cf0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
23d00 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
23d10 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
23d20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
23d30 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
23d40 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
23d50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
23d60 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
23d70 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
23d80 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
23d90 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
23da0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
23db0 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
23dc0 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
23dd0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
23de0 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
23df0 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
23e00 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
23e10 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
23e20 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
23e30 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
23e40 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
23e50 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
23e60 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
23e70 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
23e80 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
23e90 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
23ea0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
23eb0 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
23ec0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
23ed0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
23ee0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
23ef0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
23f00 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
23f10 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
23f20 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
23f30 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
23f40 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
23f70 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
23f80 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
23f90 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
23fa0 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
23fb0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
23fc0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
23fd0 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
23fe0 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
23ff0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
24000 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
24010 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
24020 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
24030 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
24040 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
24050 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
24060 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
24070 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
24080 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
24090 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
240a0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
240b0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
240c0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
240d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
240e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
240f0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
24100 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
24110 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
24120 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
24130 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
24140 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
24150 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24160 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
24170 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
24180 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
241a0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
241b0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
241c0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
241d0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
241e0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
241f0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
24200 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
24210 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
24220 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
24230 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
24240 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
24250 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24260 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
24270 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
24280 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
24290 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
242a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
242b0 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
242c0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
242d0 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
242e0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
242f0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
24300 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
24310 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24320 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
24330 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
24340 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
24350 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
24360 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
24370 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
24380 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
24390 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
243a0 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
243b0 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
243c0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
243d0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
243e0 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
243f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24400 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
24410 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
24420 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
24430 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
24440 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
24450 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
24460 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
24470 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
24480 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
24490 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
244a0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
244b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
244c0 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
244d0 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
244e0 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
244f0 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
24500 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
24510 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
24520 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
24530 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
24540 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
24550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24560 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
24570 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
24580 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
24590 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
245a0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
245b0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
245c0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
245d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
245e0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
245f0 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
24600 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
24610 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
24620 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
24630 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
24640 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
24650 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
24660 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
24670 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
24680 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
24690 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
246a0 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
246b0 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
246c0 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
246d0 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
246e0 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
246f0 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
24700 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
24710 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
24720 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
24730 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
24740 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
24750 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
24760 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
24770 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61  etColumnToReg(Pa
24780 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
24790 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
247a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
247b0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
247c0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
247d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
247e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
247f0 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
24800 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24820 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
24830 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
24840 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24850 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
24860 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
24870 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
24880 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  p(Parse*);.void 
24890 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
248a0 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  Remove(Parse*, i
248b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
248c0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
248d0 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f  lear(Parse*);.vo
248e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
248f0 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67  cheAffinityChang
24900 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
24910 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24920 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
24930 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
24940 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24950 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
24960 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
24970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24980 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
24990 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
249a0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
249b0 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
249c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
249d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
249e0 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
249f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
24a00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24a10 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
24a20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24a30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
24a40 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
24a50 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
24a60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
24a70 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
24a80 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
24a90 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
24aa0 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
24ab0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
24ac0 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
24ad0 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
24ae0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
24af0 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
24b00 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
24b10 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
24b20 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
24b30 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
24b40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
24b50 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
24b60 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
24b70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24b80 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
24b90 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
24ba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24bb0 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
24bc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
24bd0 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
24be0 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
24bf0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
24c00 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
24c10 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
24c20 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
24c30 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63  se*,int isView,c
24c40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24c50 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
24c60 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
24c70 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69  bleItem(Parse*,i
24c80 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74  nt isView,struct
24c90 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
24ca0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
24cb0 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
24cc0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24cd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
24ce0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
24cf0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
24d00 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
24d10 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
24d20 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24d30 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
24d40 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
24d50 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
24d60 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
24d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
24d80 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
24d90 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
24da0 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
24db0 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
24dc0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
24dd0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
24de0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
24df0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
24e00 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
24e10 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
24e20 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
24e30 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
24e40 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72  Expr(Expr*, Expr
24e50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
24e60 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
24e70 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
24e80 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
24e90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24ea0 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
24eb0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
24ec0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24ed0 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
24ee0 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
24ef0 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
24f00 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
24f10 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
24f20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
24f30 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
24f40 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
24f50 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
24f60 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
24f70 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
24f80 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
24f90 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
24fa0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
24fb0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
24fc0 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
24fd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24fe0 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
24ff0 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
25000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
25010 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25020 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
25030 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
25040 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
25050 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
25060 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
25070 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
25080 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
25090 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
250a0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
250b0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
250c0 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
250d0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
250e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
250f0 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
25100 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
25110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25120 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
25130 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
25140 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
25150 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
25160 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
25170 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
25180 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
25190 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
251a0 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
251b0 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
251c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
251d0 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
251e0 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
251f0 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
25200 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
25210 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
25220 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
25230 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25240 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
25250 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
25260 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
25270 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
25280 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
25290 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
252a0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
252b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
252c0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
252d0 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
252e0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
252f0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
25300 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
25310 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
25320 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
25330 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
25340 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
25350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
25360 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
25370 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
25380 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
25390 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
253a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
253b0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
253c0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
253d0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
253e0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
253f0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
25400 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
25410 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
25440 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
25450 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
25460 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
25470 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
25480 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
25490 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
254a0 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
254b0 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
254c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
254d0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
254e0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
254f0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
25500 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
25510 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25520 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
25530 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25540 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
25550 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
25560 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
25570 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
25580 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
25590 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
255a0 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
255b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
255c0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
255d0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
255e0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
255f0 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
25600 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
25610 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
25620 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
25630 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
25640 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
25650 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
25660 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
25670 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
25680 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
25690 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
256a0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
256b0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
256c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
256d0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
256e0 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
256f0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
25700 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
25710 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
25720 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25730 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25740 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
25750 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
25760 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
25770 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
25780 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
25790 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
257a0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
257b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
257c0 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
257d0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
257e0 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
257f0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
25800 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
25810 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
25820 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
25830 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25840 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
25850 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
25860 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
25870 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
25880 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
25890 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
258a0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
258b0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
258c0 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
258d0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
258e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
258f0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
25900 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25910 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
25920 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
25930 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
25940 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
25950 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
25960 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
25970 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
25980 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
25990 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
259a0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
259b0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
259e0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
259f0 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
25a00 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
25a10 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
25a20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25a30 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
25a40 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
25a50 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
25a60 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
25a70 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
25a80 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
25a90 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
25aa0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
25ab0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
25ac0 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
25ad0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
25ae0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
25af0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
25b00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25b10 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
25b20 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
25b30 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
25b40 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
25b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
25b70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
25b80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
25b90 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
25ba0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
25bb0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
25bc0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
25bd0 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
25be0 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
25bf0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
25c00 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
25c10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
25c20 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
25c30 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
25c40 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
25c50 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
25c60 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
25c70 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
25c80 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
25c90 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
25ca0 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
25cb0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
25cc0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
25cf0 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
25d00 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
25d10 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
25d20 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
25d30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
25d40 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
25d50 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
25d60 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
25d70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
25d80 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
25d90 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
25da0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
25db0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
25dc0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
25dd0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
25de0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
25df0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
25e00 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
25e10 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
25e20 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
25e30 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
25e40 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
25e50 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
25e60 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
25e70 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
25e80 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
25e90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25ea0 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  sToplevel(p) ((p
25eb0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29  )->pToplevel==0)
25ec0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25ed0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
25ee0 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
25ef0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
25f00 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
25f10 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
25f20 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
25f30 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
25f40 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
25f50 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
25f60 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
25f70 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
25f80 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
25f90 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
25fa0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
25fb0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
25fc0 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
25fd0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
25fe0 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
25ff0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
26000 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
26010 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
26020 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
26030 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
26040 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
26050 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
26060 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
26070 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
26080 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
26090 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
260a0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
260b0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
260c0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
260d0 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
260e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
260f0 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
26100 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
26110 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26120 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
26130 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
26140 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
26150 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
26160 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
26170 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
26180 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
26190 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
261a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
261b0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
261c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
261d0 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
261e0 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
261f0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
26200 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
26210 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
26220 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
26230 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
26240 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
26250 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
26260 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
26270 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
26280 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
26290 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
262a0 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
262b0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
262c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
262d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
262e0 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
262f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
26300 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
26310 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
26320 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
26330 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26340 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
26350 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
26360 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
26370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
26380 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
26390 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
263a0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
263b0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
263c0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
263d0 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
263e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
263f0 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
26400 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26410 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
26420 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
26430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
26440 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
26450 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
26460 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
26470 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
26480 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
26490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
264a0 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
264b0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
264c0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
264d0 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
264e0 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
264f0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
26500 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
26510 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
26520 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
26530 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
26540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
26550 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
26560 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
26570 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
26580 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
26590 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
265a0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
265b0 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
265c0 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
265d0 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
265e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
265f0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
26600 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
26610 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
26620 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20  le);.#endif.u64 
26630 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
26640 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a  nt(LogEst);../*.
26650 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
26660 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
26670 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
26680 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
26690 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
266a0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
266b0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
266c0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
266d0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
266e0 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  * file..*/.int s
266f0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
26700 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
26710 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u64);.u8 sqlite3
26720 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
26730 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
26740 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
26750 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
26760 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
26770 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
26780 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
26790 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
267a0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
267b0 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e  e is for a varin
267c0 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65  t to be a single
267d0 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c   byte.  They fol
267e0 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73  lowing.** macros
267f0 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d   handle the comm
26800 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20  on case without 
26810 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c  a procedure call
26820 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a  , but then call.
26830 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ** the procedure
26840 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69   for larger vari
26850 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
26860 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
26870 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
26880 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
26890 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
268a0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
268b0 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
268c0 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
268d0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
268e0 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
268f0 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
26900 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26910 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
26920 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28  3PutVarint((A),(
26930 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
26940 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
26950 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
26960 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
26970 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
26980 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
26990 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
269a0 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c  ityStr(sqlite3*,
269b0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
269c0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
269d0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
269e0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
269f0 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
26a00 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
26a10 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
26a20 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
26a30 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
26a40 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
26a50 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
26a60 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
26a70 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
26a80 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
26a90 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
26aa0 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
26ab0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
26ac0 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
26ad0 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
26ae0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
26af0 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
26b00 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
26b10 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
26b20 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
26b30 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  *,int);.void *sq
26b40 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
26b50 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
26b60 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
26b70 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
26b80 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
26b90 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
26ba0 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
26bb0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
26bc0 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
26bd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44  ined(SQLITE_NEED
26be0 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74  _ERR_NAME).const
26bf0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
26c00 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64  rName(int);.#end
26c10 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
26c20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
26c30 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
26c40 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
26c50 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
26c60 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
26c70 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
26c80 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
26c90 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71  r*,int);.CollSeq
26ca0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
26cb0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
26cc0 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
26cd0 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
26ce0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
26cf0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
26d00 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
26d10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
26d20 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
26d30 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
26d40 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
26d50 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
26d60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
26d70 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
26d80 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
26d90 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
26da0 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
26db0 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
26dc0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
26dd0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
26de0 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
26df0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
26e00 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
26e10 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
26e20 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
26e30 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
26e40 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
26e50 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
26e60 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
26e70 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
26e80 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
26e90 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
26ea0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
26eb0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
26ec0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
26ed0 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
26ee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
26ef0 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
26f00 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
26f10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26f20 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
26f30 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
26f40 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
26f50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
26f60 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
26f70 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
26f80 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
26f90 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
26fa0 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
26fb0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
26fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
26fd0 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
26fe0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
26ff0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20  onst void *,u8, 
27000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27010 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
27020 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
27030 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
27040 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
27050 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27060 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
27070 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
27080 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
27090 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
270a0 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  3 *);.char *sqli
270b0 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
270c0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
270d0 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  d*, int, u8);.in
270e0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
270f0 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
27100 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
27110 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
27120 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
27130 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
27140 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
27150 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
27160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
27170 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
27180 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
27190 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
271a0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
271b0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
271c0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
271d0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
271e0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
271f0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
27200 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
27210 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
27220 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
27230 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
27240 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
27250 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
27260 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
27270 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e  n SQLITE_WSD Fun
27280 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
27290 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b  GlobalFunctions;
272a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
272b0 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
272c0 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
272d0 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
272e0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
272f0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
27300 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
27310 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27320 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
27330 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
27340 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
27350 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
27360 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27370 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
27380 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
27390 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
273a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
273b0 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
273c0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
273d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
273e0 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
273f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
27400 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
27410 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
27420 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
27430 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
27440 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
27450 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
27460 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27470 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
27480 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
27490 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
274a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
274b0 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
274c0 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
274d0 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
274e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
274f0 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
27500 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
27510 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
27520 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
27530 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
27540 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
27550 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
27560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
27570 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
27580 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
27590 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
275a0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
275b0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
275c0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
275d0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
275e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
275f0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
27600 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
27610 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
27620 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
27630 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
27640 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
27650 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
27660 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
27670 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
27680 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
27690 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
276a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
276b0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
276c0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
276d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
276e0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
276f0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
27700 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
27710 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
27720 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
27730 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
27740 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
27750 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
27760 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
27770 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
27780 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
27790 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
277a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
277b0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
277c0 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
277d0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
277e0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
277f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
27800 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
27810 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27820 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
27830 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
27840 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
27850 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
27860 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
27870 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
27880 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
27890 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
278a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
278b0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
278c0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
278d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
278e0 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
278f0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
27900 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
27910 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
27920 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
27930 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27940 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
27950 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
27960 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
27970 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
27980 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
27990 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
279a0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
279b0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
279c0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
279d0 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
279e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
279f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
27a00 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
27a10 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
27a20 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
27a30 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
27a40 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
27a50 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
27a60 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
27a70 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
27a80 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
27a90 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
27aa0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
27ab0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
27ac0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
27ad0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
27ae0 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
27af0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
27b00 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
27b10 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
27b20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
27b30 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
27b40 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
27b50 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
27b60 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
27b70 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
27b80 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
27b90 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
27ba0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
27bb0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
27bc0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
27bd0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
27be0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
27bf0 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
27c00 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
27c10 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27c20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
27c30 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
27c40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
27c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
27c60 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
27c70 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
27c80 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
27c90 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
27ca0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
27cb0 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
27cc0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
27cd0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
27ce0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
27cf0 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
27d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
27d10 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
27d20 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
27d30 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
27d40 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
27d50 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
27d60 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
27d70 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
27d80 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
27d90 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
27da0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
27db0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
27dc0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
27dd0 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
27de0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27df0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
27e00 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
27e10 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
27e20 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
27e30 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
27e40 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
27e50 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
27e60 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
27e70 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
27e80 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
27e90 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
27ea0 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
27eb0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
27ec0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
27ed0 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
27ee0 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
27ef0 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
27f00 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
27f10 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
27f20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
27f30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
27f40 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
27f50 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
27f60 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
27f70 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
27f80 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
27f90 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
27fa0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
27fb0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
27fc0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
27fd0 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
27fe0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
27ff0 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
28000 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
28010 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
28020 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
28030 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
28040 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
28050 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
28060 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
28070 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
28080 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
28090 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
280a0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
280b0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
280c0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
280d0 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
280e0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
280f0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
28100 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
28110 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
28120 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
28130 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
28140 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
28150 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
28160 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
28170 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
28180 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
28190 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
281a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
281b0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
281c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
281d0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
281e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
281f0 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
28200 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
28210 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
28220 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
28230 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
28240 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
28250 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
28260 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
28270 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
28280 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
28290 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
282a0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
282b0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
282c0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
282d0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
282e0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
282f0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
28300 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
28310 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
28320 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
28330 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
28340 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
28350 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
28360 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
28370 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
28380 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
28390 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
283a0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
283b0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
283c0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
283d0 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
283e0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
283f0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
28400 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
28410 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
28420 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
28430 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
28440 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
28450 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28460 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
28470 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
28480 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
28490 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
284a0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
284b0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
284c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
284d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
284e0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
284f0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
28500 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
28510 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
28520 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
28530 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
28540 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
28550 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
28560 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
28570 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
28580 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45  int sqlite3VtabE
28590 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69  ponymousTableIni
285a0 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a  t(Parse*,Module*
285b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
285c0 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
285d0 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c  eClear(sqlite3*,
285e0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
285f0 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
28600 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
28610 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
28620 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
28630 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
28640 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
28650 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28660 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
28670 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
28680 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28690 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
286a0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
286b0 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
286c0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
286d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
286e0 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
286f0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
28700 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
28710 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
28720 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
28730 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
28740 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
28750 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
28760 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
28770 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
28780 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
28790 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
287a0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
287b0 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
287c0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
287d0 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
287e0 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  Arg, Expr*);.voi
287f0 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
28800 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
28810 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
28820 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
28830 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
28840 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
28850 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
28860 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
28870 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
28880 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
28890 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
288a0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
288b0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
288c0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
288d0 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
288e0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
288f0 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e  eset(Parse*);.in
28900 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
28910 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20  re(Vdbe*);.void 
28920 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
28930 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65  heckLength(Parse
28940 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
28950 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c  nst char*);.Coll
28960 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61  Seq *sqlite3Bina
28970 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71  ryCompareCollSeq
28980 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
28990 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73  , Expr *);.int s
289a0 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f  qlite3TempInMemo
289b0 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  ry(const sqlite3
289c0 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
289d0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
289e0 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66  dename(int);.#if
289f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28a00 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74  _WAL.  int sqlit
28a10 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
28a20 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
28a30 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20   int*, int*);.  
28a40 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65  int sqlite3WalDe
28a50 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c  faultHook(void*,
28a60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28a70 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  har*,int);.#endi
28a80 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
28a90 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68  _OMIT_CTE.  With
28aa0 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64   *sqlite3WithAdd
28ab0 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f  (Parse*,With*,To
28ac0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
28ad0 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
28ae0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
28af0 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a  e(sqlite3*,With*
28b00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28b10 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a  3WithPush(Parse*
28b20 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  , With*, u8);.#e
28b30 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
28b40 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c  te3WithPush(x,y,
28b50 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  z).#define sqlit
28b60 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79  e3WithDelete(x,y
28b70 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63  ).#endif../* Dec
28b80 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
28b90 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
28ba0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
28bb0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
28bc0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
28bd0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
28be0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
28bf0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
28c00 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
28c10 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
28c20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
28c30 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
28c40 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
28c50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
28c60 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
28c70 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
28c80 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
28c90 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
28ca0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
28cb0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
28cc0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
28cd0 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
28ce0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
28cf0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
28d00 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
28d10 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
28d20 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
28d30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28d40 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
28d50 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
28d60 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
28d70 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
28d80 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
28d90 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28da0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
28db0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
28dc0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
28dd0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
28de0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
28df0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
28e00 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
28e10 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
28e20 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
28e30 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
28e40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
28e50 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
28e60 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
28e70 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
28e80 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
28e90 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
28ea0 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
28eb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
28ec0 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
28ed0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
28ee0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
28ef0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
28f00 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
28f10 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
28f20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
28f30 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
28f40 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
28f50 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
28f60 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
28f70 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
28f80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
28f90 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
28fa0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
28fb0 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
28fc0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28fd0 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
28fe0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
28ff0 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
29000 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
29010 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
29020 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
29030 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
29040 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
29050 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
29060 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
29070 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
29080 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
29090 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
290a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
290b0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
290c0 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
290d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
290e0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
290f0 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
29100 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
29110 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
29120 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
29130 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
29140 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
29150 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
29160 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
29170 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
29180 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f  IN_TEST.** is no
29190 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
291a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
291b0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
291c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
291d0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
291e0 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
291f0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
29200 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
29210 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29220 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
29230 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
29240 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
29250 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
29260 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
29270 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
29280 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
29290 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
292a0 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
292b0 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
292c0 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
292d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
292e0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
292f0 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
29300 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
29310 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
29320 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
29330 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
29340 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
29350 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
29360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
29370 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
29380 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
29390 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
293a0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
293b0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
293c0 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
293d0 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
293e0 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
293f0 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
29400 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
29410 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
29420 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
29430 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
29440 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
29450 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
29460 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
29470 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
29480 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
29490 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
294a0 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
294b0 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
294c0 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
294d0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
294e0 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
294f0 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
29500 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
29510 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
29520 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
29530 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
29540 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20   int*);..#ifdef 
29550 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
29560 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
29570 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
29580 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
29590 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
295a0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
295b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e   int, int);.  in
295c0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
295d0 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
295e0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
295f0 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
29600 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
29610 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
29620 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69  urnalExists(sqli
29630 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65  te3_file *p);.#e
29640 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29650 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
29660 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e  (pVfs) ((pVfs)->
29670 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66  szOsFile).  #def
29680 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
29690 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23 65  alExists(p) 1.#e
296a0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
296b0 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
296c0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
296d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  ;.int sqlite3Mem
296e0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64  JournalSize(void
296f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
29700 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74  MemJournal(sqlit
29710 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
29720 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
29730 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
29740 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
29750 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
29760 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
29770 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
29780 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
29790 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
297a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
297b0 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
297c0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
297d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
297e0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
297f0 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
29800 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
29810 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
29820 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
29830 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
29840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
29850 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
29860 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
29870 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
29880 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
29890 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
298a0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
298b0 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
298c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
298d0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
298e0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
298f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
29900 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
29910 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
29920 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29930 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
29940 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
29950 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
29960 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
29970 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29980 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
29990 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
299a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
299b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
299c0 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
299d0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
299e0 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
299f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
29a00 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
29a10 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
29a20 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
29a30 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
29a40 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
29a50 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
29a60 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
29a70 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
29a80 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53  es. .*/.#ifdef S
29a90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
29aa0 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
29ab0 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
29ac0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
29ad0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
29ae0 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
29af0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
29b00 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
29b10 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
29b20 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
29b30 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
29b40 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
29b50 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
29b60 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
29b70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29b80 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
29b90 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
29ba0 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
29bb0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
29bc0 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
29bd0 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
29be0 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
29bf0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
29c00 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
29c10 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
29c20 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
29c30 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
29c40 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
29c50 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
29c60 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
29c70 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
29c80 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
29c90 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
29ca0 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
29cb0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
29cc0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
29cd0 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
29ce0 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
29cf0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
29d00 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
29d10 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
29d20 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
29d30 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
29d40 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
29d50 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
29d60 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
29d70 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
29d80 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
29d90 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
29da0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
29db0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
29dc0 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
29dd0 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
29de0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
29df0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
29e00 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
29e10 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
29e20 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
29e30 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
29e40 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
29e50 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
29e60 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
29e70 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
29e80 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
29e90 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
29ea0 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
29eb0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
29ec0 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
29ed0 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
29ee0 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
29ef0 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
29f00 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
29f10 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
29f20 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
29f30 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
29f40 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
29f50 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
29f60 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
29f70 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
29f80 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
29f90 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
29fa0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
29fb0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
29fc0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
29fd0 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
29fe0 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
29ff0 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
2a000 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
2a010 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
2a020 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
2a030 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
2a040 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
2a050 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
2a060 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2a070 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
2a080 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
2a090 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  int. .**.** All 
2a0a0 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
2a0b0 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
2a0c0 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
2a0d0 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
2a0e0 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
2a0f0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
2a100 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2a110 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
2a120 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
2a130 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2a140 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2a150 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
2a160 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
2a170 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
2a180 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
2a190 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2a1a0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
2a1b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a1c0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2a1d0 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
2a1e0 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
2a1f0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2a200 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
2a210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2a220 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
2a230 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
2a240 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
2a250 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
2a260 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
2a270 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
2a280 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
2a290 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
2a2a0 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
2a2b0 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
2a2c0 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
2a2d0 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20  EMTYPE_SCRATCH  
2a2e0 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74    0x04  /* Scrat
2a2f0 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ch allocations *
2a300 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2a310 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2a320 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  8  /* Page cache
2a330 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2a340 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2a350 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2a360 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2a370 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2a380 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2a390 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2a3a0 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2a3b0 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2a3c0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2a3d0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2a3e0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2a3f0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2a400 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2a410 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2a420 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2a430 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2a440 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2a450 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  te3*);.#endif..#
2a460 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
2a470 49 4e 54 5f 48 5f 20 2a 2f 0a                    INT_H_ */.