/ Hex Artifact Content
Login

Artifact ebd88d3a2c03440f48145a47df51f0a502bbf24e:


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 20 0a 2a 2a 20 49 66 20 53  dif../* .** If S
45c0: 51 4c 49 54 45 5f 49 4e 49 54 5f 53 51 4c 4c 4f  QLITE_INIT_SQLLO
45d0: 47 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  G is defined, th
45e0: 65 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  en SQLITE_ENABLE
45f0: 5f 53 51 4c 4c 4f 47 20 69 73 20 0a 2a 2a 20 61  _SQLLOG is .** a
4600: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 66  utomatically def
4610: 69 6e 65 64 20 61 73 20 77 65 6c 6c 2e 0a 2a 2f  ined as well..*/
4620: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
4630: 49 54 45 5f 49 4e 49 54 5f 53 51 4c 4c 4f 47 29  ITE_INIT_SQLLOG)
4640: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
4650: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
4660: 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  G).# define SQLI
4670: 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
4680: 20 31 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a   1.#endif.../*.*
4690: 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64  * GCC does not d
46a0: 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74  efine the offset
46b0: 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65  of() macro so we
46c0: 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69  'll have to do i
46d0: 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a  t.** ourselves..
46e0: 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65  */.#ifndef offse
46f0: 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73  tof.#define offs
4700: 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46  etof(STRUCTURE,F
4710: 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68  IELD) ((int)((ch
4720: 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45  ar*)&((STRUCTURE
4730: 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65  *)0)->FIELD)).#e
4740: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
4750: 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69  os to compute mi
4760: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75  nimum and maximu
4770: 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73  m of two numbers
4780: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e  ..*/.#define MIN
4790: 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28  (A,B) ((A)<(B)?(
47a0: 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20  A):(B)).#define 
47b0: 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42  MAX(A,B) ((A)>(B
47c0: 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a  )?(A):(B))../*.*
47d0: 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63  * Swap two objec
47e0: 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e  ts of type TYPE.
47f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50  .*/.#define SWAP
4800: 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45  (TYPE,A,B) {TYPE
4810: 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d   t=A; A=B; B=t;}
4820: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
4830: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
4840: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
4850: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
4860: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
4870: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
4880: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
4890: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
48a0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
48b0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
48c0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
48d0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
48e0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
48f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
4900: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
4910: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
4920: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
4930: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
4940: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
4950: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
4960: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
4970: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
4980: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
4990: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
49a0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
49b0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
49c0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
49d0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
49e0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
49f0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
4a00: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
4a10: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
4a20: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
4a30: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
4a40: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
4a50: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4a60: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4a70: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
4a80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4a90: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
4aa0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
4ab0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
4ac0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
4ad0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
4ae0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
4af0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
4b00: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4b10: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
4b20: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4b30: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
4b40: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
4b50: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
4b60: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
4b70: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
4b80: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4b90: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
4ba0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
4bb0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
4bc0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
4bd0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4be0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
4bf0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
4c00: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4c10: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
4c20: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
4c30: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
4c40: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
4c50: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
4c60: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
4c70: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
4c80: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
4c90: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
4ca0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
4cb0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
4cc0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
4cd0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
4ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
4cf0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
4d00: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
4d10: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
4d20: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4d30: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
4d40: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4d50: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
4d60: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
4d70: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4d80: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
4d90: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
4da0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4db0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
4dc0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
4dd0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
4de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
4df0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
4e00: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
4e10: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
4e20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
4e30: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
4e40: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
4e50: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
4e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
4e70: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
4e80: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
4e90: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
4ea0: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
4eb0: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
4ec0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
4ed0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
4ee0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
4ef0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
4f00: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
4f10: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
4f20: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
4f30: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
4f40: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
4f50: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
4f60: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
4f70: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
4f80: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
4f90: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
4fa0: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
4fb0: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
4fc0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
4fd0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
4fe0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
4ff0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
5000: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
5010: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
5020: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
5030: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
5040: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
5050: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
5060: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
5070: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
5080: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
5090: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
50a0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
50b0: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
50c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
50d0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
50e0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
50f0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
5100: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
5110: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
5120: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
5130: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
5140: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
5150: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
5160: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d  dif../*.** Estim
5170: 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20  ated quantities 
5180: 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70  used for query p
5190: 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72  lanning are stor
51a0: 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20  ed as 16-bit.** 
51b0: 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72  logarithms.  For
51c0: 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65   quantity X, the
51d0: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73   value stored is
51e0: 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68   10*log2(X).  Th
51f0: 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f  is.** gives a po
5200: 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20  ssible range of 
5210: 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78  values of approx
5220: 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20  imately 1.0e986 
5230: 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75  to 1e-986..** Bu
5240: 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  t the allowed va
5250: 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79  lues are "grainy
5260: 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61  ".  Not every va
5270: 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  lue is represent
5280: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  able..** For exa
5290: 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73  mple, quantities
52a0: 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62   16 and 17 are b
52b0: 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20  oth represented 
52c0: 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f  by a LogEst.** o
52d0: 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20  f 40.  However, 
52e0: 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61  since LogEst qua
52f0: 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70  ntities are supp
5300: 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61  ose to be estima
5310: 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63  tes,.** not exac
5320: 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69  t values, this i
5330: 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f  mprecision is no
5340: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  t a problem..**.
5350: 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73  ** "LogEst" is s
5360: 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69  hort for "Logari
5370: 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e  thmic Estimate".
5380: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  .**.** Examples:
5390: 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20  .**      1 -> 0 
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20               20 
53b0: 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31  -> 43          1
53c0: 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20  0000 -> 132.**  
53d0: 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20      2 -> 10     
53e0: 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36          25 -> 46
53f0: 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20            25000 
5400: 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33  -> 146.**      3
5410: 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20   -> 16          
5420: 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20    100 -> 66     
5430: 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39     1000000 -> 19
5440: 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32  9.**      4 -> 2
5450: 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30  0           1000
5460: 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30   -> 99        10
5470: 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20  48576 -> 200.** 
5480: 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20      10 -> 33    
5490: 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31         1024 -> 1
54a0: 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36  00    4294967296
54b0: 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68   -> 320.**.** Th
54c0: 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20  e LogEst can be 
54d0: 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69  negative to indi
54e0: 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20  cate fractional 
54f0: 76 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d  values. .** Exam
5500: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
5510: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
5520: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
5530: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
5540: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
5550: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
5560: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
5570: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
5580: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
5590: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
55a0: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
55b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
55c0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
55d0: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
55e0: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
55f0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
5600: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
5610: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
5620: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5630: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5640: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5650: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5660: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
5670: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
5680: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
5690: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
56a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
56b0: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
56c0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
56d0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
56e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
56f0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
5700: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
5710: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
5720: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
5730: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
5740: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
5750: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
5760: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
5770: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
5780: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
5790: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
57a0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
57b0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
57c0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
57d0: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
57e0: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
57f0: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
5800: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
5810: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5820: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
5830: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
5840: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
5850: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
5860: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
5870: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
5880: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
5890: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
58a0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
58b0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
58c0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
58d0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
58e0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
58f0: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5900: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5910: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
5920: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
5930: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
5940: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
5950: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5960: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
5970: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
5980: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5990: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
59a0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
59b0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
59c0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
59d0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
59e0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
59f0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
5a00: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
5a10: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
5a20: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5a30: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
5a40: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
5a50: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
5a60: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
5a70: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
5a80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
5a90: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
5aa0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
5ab0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5ac0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
5ad0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
5ae0: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
5af0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
5b00: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
5b10: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
5b20: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
5b30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5b40: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
5b50: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
5b60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
5b70: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
5b80: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5b90: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
5ba0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
5bb0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
5bc0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
5bd0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
5be0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
5bf0: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
5c00: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
5c10: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
5c20: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
5c30: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
5c40: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5c50: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
5c60: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
5c70: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
5c80: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5c90: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
5ca0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
5cb0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
5cc0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
5cd0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
5ce0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
5cf0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
5d00: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
5d10: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
5d20: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
5d30: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
5d40: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
5d50: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
5d60: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
5d70: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
5d80: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
5d90: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
5da0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
5db0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
5dc0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
5dd0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
5de0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
5df0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
5e00: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
5e10: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
5e20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
5e30: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
5e40: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
5e50: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
5e60: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
5e70: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
5e80: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
5e90: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
5ea0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
5eb0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
5ec0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
5ed0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
5ee0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5ef0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5f00: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5f10: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5f20: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5f30: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5f40: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5f50: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5f60: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
5f70: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
5f80: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
5f90: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
5fa0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74  oc() implementat
5fb0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
5fc0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
5fd0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
5fe0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
5ff0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
6000: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
6010: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
6020: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
6030: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
6040: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
6050: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
6060: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
6070: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
6080: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
6090: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
60a0: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
60b0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
60c0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
60d0: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
60e0: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
60f0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
6100: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
6110: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
6120: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
6130: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
6140: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
6150: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
6160: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6170: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
6180: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
6190: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
61a0: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
61b0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
61c0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
61d0: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
61e0: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
61f0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
6200: 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50   if TARGET_OS_IP
6210: 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53  HONE.#   undef S
6220: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6230: 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53  IZE.#   define S
6240: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6250: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
6260: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
6270: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6280: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
6290: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
62a0: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
62b0: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
62c0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
62d0: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
62e0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
62f0: 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64  (__sun) \.  || d
6300: 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44  efined(__FreeBSD
6310: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
6320: 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f  ed(__DragonFly__
6330: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
6340: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6350: 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a  E 0x7fff0000  /*
6360: 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23   2147418112 */.#
6370: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
6380: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6390: 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a  _SIZE 0.# endif.
63a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
63b0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  MAX_MMAP_SIZE_xc
63c0: 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72   1 /* exclude fr
63d0: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
63e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
63f0: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
6400: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
6410: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
6420: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
6430: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
6440: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
6450: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
6460: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
6470: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
6480: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
6490: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
64a0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
64b0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
64c0: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
64d0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
64e0: 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e  P_SIZE 0.# defin
64f0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
6500: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
6510: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
6520: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
6530: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
6540: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
6550: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6560: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
6570: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
6580: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
6590: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
65a0: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
65b0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
65c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
65d0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
65e0: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
65f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6600: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
6610: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
6620: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
6630: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
6640: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
6650: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
6660: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6670: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6680: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
6690: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
66a0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
66b0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
66c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
66d0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
66e0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
66f0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
6700: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
6710: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
6720: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
6730: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6740: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
6750: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6760: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
6770: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
6780: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6790: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
67a0: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
67b0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
67c0: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
67d0: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
67e0: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
67f0: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
6800: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
6810: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
6820: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
6830: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
6840: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
6850: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
6860: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
6870: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
6880: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
6890: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
68a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
68b0: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
68c0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
68d0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
68e0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
68f0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
6900: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
6910: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
6920: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
6930: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
6940: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
6950: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
6960: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
6970: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
6980: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
6990: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
69a0: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
69b0: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
69c0: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
69d0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
69e0: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
69f0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
6a00: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
6a10: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
6a20: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
6a30: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
6a40: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
6a50: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
6a60: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
6a70: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
6a80: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
6a90: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
6aa0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
6ab0: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
6ac0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
6ad0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
6ae0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
6af0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
6b00: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
6b10: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
6b20: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
6b30: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
6b40: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
6b50: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
6b60: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
6b70: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
6b80: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
6b90: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
6ba0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
6bb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6bc0: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
6bd0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
6be0: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
6bf0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
6c00: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
6c10: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
6c20: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
6c30: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
6c40: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6c50: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
6c60: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
6c70: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
6c80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
6c90: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
6ca0: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
6cb0: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
6cc0: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
6cd0: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
6ce0: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
6cf0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
6d00: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
6d10: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
6d20: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
6d30: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
6d40: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
6d50: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
6d60: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
6d70: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
6d80: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
6d90: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
6da0: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
6db0: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
6dc0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
6dd0: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
6de0: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
6df0: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
6e00: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
6e10: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
6e20: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
6e30: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
6e40: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
6e50: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
6e60: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
6e70: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
6e80: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
6e90: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
6ea0: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
6eb0: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
6ec0: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
6ed0: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
6ee0: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
6ef0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
6f00: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
6f10: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
6f20: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
6f30: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
6f40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6f50: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
6f60: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
6f70: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
6f80: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
6f90: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
6fa0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
6fb0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
6fc0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
6fd0: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
6fe0: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
6ff0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
7000: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
7010: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
7020: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
7030: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
7040: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
7050: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
7060: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
7070: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
7080: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
7090: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
70a0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
70b0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
70c0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
70d0: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
70e0: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
70f0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
7100: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
7110: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
7120: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
7130: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
7140: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
7150: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
7160: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
7170: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
7180: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
7190: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
71a0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
71b0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
71c0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
71d0: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
71e0: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
71f0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
7200: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
7210: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
7220: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
7230: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
7240: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
7250: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
7260: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
7270: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
7280: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
7290: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
72a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
72b0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
72c0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
72d0: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
72e0: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
72f0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
7300: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
7310: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
7320: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
7330: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
7340: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
7350: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
7360: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
7370: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
7380: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
7390: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
73a0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
73b0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
73c0: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
73d0: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
73e0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
73f0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
7400: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
7410: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
7420: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
7430: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
7440: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
7450: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
7460: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
7470: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
7480: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
7490: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
74a0: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
74b0: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
74c0: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
74d0: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
74e0: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
74f0: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
7500: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
7510: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
7520: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
7530: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
7540: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
7550: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
7560: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
7570: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
7580: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
7590: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
75a0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
75b0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
75c0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
75d0: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
75e0: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
75f0: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
7600: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7610: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
7620: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
7630: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
7640: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
7650: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7660: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7670: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
7680: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
7690: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
76a0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
76b0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
76c0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
76d0: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
76e0: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
76f0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
7700: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
7710: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
7720: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
7730: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
7740: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
7750: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7760: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7770: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7780: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7790: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
77a0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
77b0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
77c0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
77d0: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
77e0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
77f0: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
7800: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
7810: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
7820: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
7830: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
7840: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
7850: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7860: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7870: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7880: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7890: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
78a0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
78b0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
78c0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
78d0: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
78e0: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
78f0: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
7900: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
7910: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
7920: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
7930: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
7940: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
7950: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7960: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7970: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7980: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7990: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
79a0: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
79b0: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
79c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
79d0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
79e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
79f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7a00: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
7a10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7a20: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
7a30: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
7a40: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
7a50: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7a60: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7a70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7a80: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7a90: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7aa0: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7ab0: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7ac0: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7ad0: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7ae0: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7af0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
7b00: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
7b10: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
7b20: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
7b30: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
7b40: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
7b50: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7b60: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7b70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b80: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7b90: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
7ba0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
7bb0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
7bc0: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
7bd0: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
7be0: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
7bf0: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
7c00: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7c10: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
7c20: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
7c30: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
7c40: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
7c50: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
7c60: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
7c70: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
7c80: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
7c90: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
7ca0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
7cb0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7cc0: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
7cd0: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
7ce0: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
7cf0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7d00: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
7d10: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
7d20: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
7d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7d40: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
7d50: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7d60: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
7d70: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
7d80: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
7d90: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
7da0: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
7db0: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
7dc0: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
7dd0: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
7de0: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
7df0: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
7e00: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
7e10: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
7e20: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
7e30: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
7e40: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
7e50: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
7e60: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
7e70: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
7e80: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
7e90: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
7ea0: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
7eb0: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
7ec0: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
7ed0: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
7ee0: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
7ef0: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
7f00: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
7f10: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
7f20: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
7f30: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
7f40: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
7f50: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
7f60: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
7f70: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
7f80: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
7f90: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7fa0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
7fb0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
7fc0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
7fd0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
7fe0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
7ff0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
8000: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
8010: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
8020: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
8030: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
8040: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
8050: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
8060: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
8070: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
8080: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
8090: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
80a0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
80b0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
80c0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
80d0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
80e0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
80f0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
8100: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
8110: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
8120: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
8130: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
8140: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
8150: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
8160: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
8170: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
8180: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
8190: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
81a0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
81b0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
81c0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
81d0: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
81e0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
81f0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
8200: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8210: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
8220: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
8230: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
8240: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
8250: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
8260: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
8270: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
8280: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
8290: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
82a0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
82b0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
82c0: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
82d0: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
82e0: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
82f0: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
8300: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
8310: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
8320: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
8330: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
8340: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
8350: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
8360: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
8370: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
8380: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
8390: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
83a0: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
83b0: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
83c0: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
83d0: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
83e0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
83f0: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
8400: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
8410: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
8420: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
8430: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
8440: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
8450: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
8460: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
8470: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
8480: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
8490: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
84a0: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
84b0: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
84c0: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
84d0: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
84e0: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
84f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
8500: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
8510: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
8520: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
8530: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
8540: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
8550: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
8560: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
8570: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
8580: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
8590: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
85a0: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
85b0: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
85c0: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
85d0: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
85e0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
85f0: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
8600: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
8610: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
8620: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8630: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
8640: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
8650: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
8660: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8670: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
8680: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
8690: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
86a0: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
86b0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
86c0: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
86d0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
86e0: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
86f0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
8700: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
8710: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
8720: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
8730: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
8740: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
8750: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8760: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
8770: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
8780: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
8790: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
87a0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
87b0: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
87c0: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
87d0: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
87e0: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
87f0: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
8800: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
8810: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
8820: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
8830: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
8840: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
8850: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
8860: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
8870: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
8880: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
8890: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
88a0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
88b0: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
88c0: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
88d0: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
88e0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
88f0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
8900: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
8910: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
8920: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
8930: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
8940: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
8950: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
8960: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
8970: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8980: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
8990: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
89a0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
89b0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
89c0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
89d0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
89e0: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
89f0: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
8a00: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
8a10: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
8a20: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
8a30: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
8a40: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
8a50: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
8a60: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
8a70: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
8a80: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
8a90: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
8aa0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
8ab0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
8ac0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
8ad0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
8ae0: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
8af0: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
8b00: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
8b10: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
8b20: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
8b30: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
8b40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
8b50: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
8b60: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
8b70: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
8b80: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
8b90: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
8ba0: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
8bb0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
8bc0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
8bd0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
8be0: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
8bf0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
8c00: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
8c10: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
8c20: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
8c30: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
8c40: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
8c50: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
8c60: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
8c70: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
8c80: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
8c90: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
8ca0: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
8cb0: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
8cc0: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
8cd0: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
8ce0: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
8cf0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
8d00: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
8d10: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
8d20: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
8d30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8d40: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
8d50: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
8d60: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
8d70: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
8d80: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
8d90: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
8da0: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
8db0: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
8dc0: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
8dd0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
8de0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
8df0: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
8e00: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
8e10: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
8e20: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
8e30: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
8e40: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
8e50: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
8e60: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
8e70: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
8e80: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
8e90: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
8ea0: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
8eb0: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
8ec0: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
8ed0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
8ee0: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
8ef0: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
8f00: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
8f10: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
8f20: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
8f30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8f40: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
8f50: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
8f60: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
8f70: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
8f80: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
8f90: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
8fa0: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
8fb0: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
8fc0: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
8fd0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8fe0: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
8ff0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9000: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
9010: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
9020: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
9030: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
9040: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
9050: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
9060: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
9070: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
9080: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
9090: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
90a0: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
90b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
90c0: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
90d0: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
90e0: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
90f0: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
9100: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
9110: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
9120: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
9130: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
9140: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
9150: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
9160: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
9170: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
9180: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9190: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
91a0: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
91b0: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
91c0: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
91e0: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
91f0: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
9200: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
9210: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
9220: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
9230: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
9240: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9250: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
9260: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
9270: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
9280: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
9290: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
92a0: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
92b0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
92c0: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
92d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
92e0: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
92f0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
9300: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
9310: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
9320: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9330: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
9340: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
9350: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
9360: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
9370: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
9380: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
9390: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
93a0: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
93b0: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
93c0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
93d0: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
93e0: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
93f0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
9400: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
9410: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
9420: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
9430: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
9440: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
9450: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
9460: 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
9470: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
9480: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
9490: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
94a0: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
94b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
94c0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
94d0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
94e0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
94f0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
9500: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
9510: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
9520: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
9530: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9540: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
9550: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
9560: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
9570: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
9580: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
9590: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
95a0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
95b0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
95c0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
95d0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
95e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
95f0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
9600: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
9610: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9630: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
9640: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
9650: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
9660: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
9670: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
9680: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
9690: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
96a0: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
96b0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
96c0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
96d0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
96e0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
96f0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
9700: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
9710: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
9720: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
9730: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
9740: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
9750: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
9760: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
9770: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
9780: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
9790: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
97a0: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
97b0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
97c0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
97d0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
97e0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
97f0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
9800: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
9810: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
9820: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
9830: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
9840: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
9850: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
9860: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
9870: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
9880: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
9890: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
98a0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
98b0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
98c0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
98d0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
98e0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
98f0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9910: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
9920: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9930: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9940: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9950: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9960: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9980: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9990: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
99a0: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
99b0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
99c0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
99d0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
99e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
99f0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a10: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
9a20: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  r*);.#endif.../*
9a30: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
9a40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
9a50: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9a60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9a70: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
9a80: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
9a90: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
9ab0: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
9ac0: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
9ad0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
9ae0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
9af0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
9b00: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
9b10: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
9b20: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
9b30: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
9b40: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
9b50: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
9b60: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
9b70: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
9b80: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
9b90: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
9ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9bb0: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
9bc0: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9be0: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
9bf0: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
9c00: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
9c10: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
9c20: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
9c30: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
9c40: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
9c50: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
9c70: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
9c80: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
9c90: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
9ca0: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
9cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9cc0: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
9cd0: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
9ce0: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
9cf0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
9d00: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
9d10: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
9d20: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
9d30: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9d40: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
9d50: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
9d60: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
9d70: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
9d90: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
9da0: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
9db0: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
9dc0: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
9de0: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
9df0: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
9e00: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
9e10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9e20: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
9e30: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
9e40: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9e60: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
9e70: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
9e80: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
9ea0: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
9eb0: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
9ec0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
9ed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
9ee0: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
9ef0: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
9f00: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
9f10: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
9f20: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
9f30: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
9f40: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
9f50: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
9f60: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
9f70: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
9f80: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
9f90: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
9fa0: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9fc0: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
9fd0: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
9fe0: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
9ff0: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
a000: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a010: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
a020: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
a030: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
a040: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
a050: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
a060: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
a070: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
a080: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
a090: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
a0a0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
a0b0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
a0c0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
a0d0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
a0e0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
a0f0: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
a100: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
a110: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
a120: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a130: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
a140: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
a150: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
a160: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
a170: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
a180: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
a190: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
a1a0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
a1b0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
a1c0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
a1d0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
a1e0: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
a1f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
a200: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
a210: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
a220: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
a230: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
a240: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
a250: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
a260: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
a270: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
a280: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
a290: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
a2a0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
a2b0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
a2c0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
a2f0: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
a300: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
a310: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
a320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
a330: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
a340: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
a350: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
a360: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
a370: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
a380: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
a390: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
a3a0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
a3b0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a3c0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
a3d0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
a3e0: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
a3f0: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
a400: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a410: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
a420: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
a430: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a450: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a460: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
a470: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
a480: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
a490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a4a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a4b0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
a4c0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
a4d0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
a4e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a4f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
a500: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
a510: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
a520: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
a530: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a540: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
a550: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
a560: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
a570: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
a580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a590: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
a5a0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
a5b0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a5d0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
a5e0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
a5f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
a600: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
a610: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
a620: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
a630: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
a640: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a660: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a670: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
a680: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
a690: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
a6a0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
a6b0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
a6c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a6d0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a700: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
a710: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a720: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
a730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a740: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
a750: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
a760: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
a770: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
a780: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
a790: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a7a0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
a7b0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
a7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a7d0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
a7e0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
a7f0: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
a800: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
a810: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
a820: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a830: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
a840: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
a850: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
a860: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
a870: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a880: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
a890: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
a8a0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
a8b0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
a8c0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
a8d0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
a8e0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
a8f0: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
a900: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
a910: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
a920: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a930: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
a940: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
a950: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
a960: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
a970: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
a980: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
a990: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
a9a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
a9b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
a9c0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
a9d0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
a9e0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
a9f0: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
aa00: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
aa10: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
aa20: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
aa30: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
aa40: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
aa50: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
aa60: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
aa70: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
aa80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
aa90: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
aaa0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
aab0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
aac0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
aad0: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
aae0: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
aaf0: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
ab00: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
ab10: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
ab20: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
ab30: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
ab40: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
ab50: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
ab60: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
ab70: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
ab80: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
ab90: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
aba0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
abb0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
abc0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
abd0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
abe0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
abf0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
ac00: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
ac10: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
ac20: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
ac30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ac40: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
ac50: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
ac60: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
ac70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
ac80: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
ac90: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
aca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
acb0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
acc0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
acd0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
ace0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
acf0: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
ad00: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
ad10: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
ad20: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
ad30: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
ad40: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
ad50: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
ad60: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
ad70: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
ad80: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
ad90: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
ada0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
adb0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
adc0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
add0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
ade0: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
adf0: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
ae00: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
ae10: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
ae20: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
ae30: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
ae40: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
ae50: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
ae60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
ae70: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ae80: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
ae90: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
aea0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
aeb0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
aec0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
aee0: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
aef0: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
af00: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
af10: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
af20: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
af30: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
af40: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
af50: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
af60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
af70: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
af80: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
af90: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
afb0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
afc0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
afd0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
afe0: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
aff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b000: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
b010: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b020: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
b030: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
b040: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
b050: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
b060: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
b070: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
b080: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
b090: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
b0a0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
b0b0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
b0c0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
b0d0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
b0e0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
b0f0: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
b100: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
b110: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
b120: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
b130: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
b140: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
b150: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
b160: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
b170: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
b180: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
b190: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
b1a0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
b1b0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
b1c0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b1d0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
b1e0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
b1f0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
b200: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
b210: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
b220: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
b230: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
b240: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
b250: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
b260: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
b270: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
b280: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
b290: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
b2a0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
b2b0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
b2c0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
b2d0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
b2e0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
b2f0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
b300: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
b310: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
b320: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
b330: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
b340: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
b350: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
b360: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
b370: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
b380: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b3a0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
b3b0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
b3c0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
b3d0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
b3e0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
b3f0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
b400: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
b410: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
b420: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
b430: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
b440: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
b450: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
b460: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b470: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
b480: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
b490: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
b4a0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b4b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
b4c0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
b4d0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
b4e0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
b4f0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
b500: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
b510: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
b520: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
b530: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
b540: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
b550: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
b560: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
b570: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
b580: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
b590: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
b5a0: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
b5b0: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
b5c0: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
b5d0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b5e0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
b5f0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
b600: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
b610: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
b620: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b630: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
b640: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20       0x00000004 
b650: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
b660: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
b670: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b680: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
b690: 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f  c  0x00000008  /
b6a0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
b6b0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
b6c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b6d0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
b6e0: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
b6f0: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
b700: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
b710: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
b720: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
b730: 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  020  /* Show ful
b740: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
b750: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
b760: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
b770: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
b780: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
b790: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
b7a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b7b0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
b7c0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
b7d0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
b7e0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
b7f0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b820: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
b830: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
b840: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b870: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
b880: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
b890: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
b8a0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
b8b0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
b8c0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
b8d0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
b910: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
b920: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
b930: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
b940: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
b950: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
b960: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
b970: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b980: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
b990: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
b9a0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
b9b0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
b9c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b9d0: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
b9e0: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
b9f0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
ba00: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
ba10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
ba20: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
ba30: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
ba40: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
ba50: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
ba60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
ba70: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
ba80: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
ba90: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
baa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
bab0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bac0: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
bad0: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
bae0: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
baf0: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
bb00: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
bb10: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
bb20: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
bb30: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
bb40: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
bb50: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
bb60: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
bb70: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
bb80: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
bb90: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
bba0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
bbb0: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
bbc0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
bbd0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
bbe0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
bbf0: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
bc00: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
bc10: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
bc20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
bc30: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
bc40: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
bc50: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
bc60: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
bc70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc80: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
bc90: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
bca0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
bcb0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
bcc0: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
bcd0: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
bce0: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
bcf0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
bd00: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
bd10: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
bd20: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
bd30: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
bd40: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
bd50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
bd60: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
bd70: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
bd80: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
bd90: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bda0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
bdb0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
bdc0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
bdd0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
bde0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
bdf0: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
be00: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
be10: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
be20: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
be30: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
be40: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
be50: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
be60: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
be70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
be80: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
be90: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
bea0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
beb0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
bec0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
bed0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
bee0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
bef0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
bf00: 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  d */.../*.** Bit
bf10: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
bf20: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
bf30: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
bf40: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
bf50: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
bf60: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
bf70: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
bf80: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
bf90: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
bfa0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
bfb0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
bfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
bfd0: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
bfe0: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
bff0: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
c000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
c010: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
c020: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
c030: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
c040: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
c050: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
c060: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
c070: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
c080: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
c090: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
c0a0: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
c0b0: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
c0e0: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
c0f0: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
c100: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c110: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
c120: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
c130: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
c140: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
c150: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
c160: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
c170: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
c180: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
c190: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
c1a0: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
c1b0: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
c1c0: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
c1d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c1e0: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
c1f0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
c200: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
c210: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
c220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c230: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
c240: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
c250: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
c260: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
c270: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
c280: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
c290: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
c2a0: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
c2b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
c2c0: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
c2d0: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
c2e0: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
c2f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c300: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
c310: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
c320: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
c330: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
c340: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
c350: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
c360: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
c370: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
c380: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
c390: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
c3a0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
c3b0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
c3c0: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
c3d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c3e0: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
c3f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c400: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c410: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
c420: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
c430: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
c440: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
c450: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
c460: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
c470: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
c480: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
c490: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
c4a0: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
c4b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c4c0: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
c4d0: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
c4e0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
c4f0: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
c500: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
c510: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
c520: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
c530: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
c540: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
c550: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
c560: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
c570: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
c580: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
c590: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
c5a0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c5b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
c5c0: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
c5d0: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
c5e0: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
c5f0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
c600: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
c610: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
c620: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
c630: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
c640: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
c650: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
c660: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
c670: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
c680: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
c690: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
c6a0: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
c6b0: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
c6c0: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
c6d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
c6e0: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
c6f0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
c700: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
c710: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
c720: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
c730: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
c740: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
c750: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
c760: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c770: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
c780: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
c790: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
c7a0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
c7b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c7c0: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
c7d0: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
c7e0: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
c7f0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
c800: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
c810: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
c820: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
c830: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
c840: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
c850: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
c860: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
c870: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
c880: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
c890: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
c8a0: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
c8b0: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
c8c0: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
c8d0: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
c8e0: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
c8f0: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
c900: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
c910: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
c920: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
c930: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c940: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
c950: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
c960: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
c970: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
c980: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
c990: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
c9a0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
c9b0: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
c9c0: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
c9d0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
c9e0: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
c9f0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
ca00: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
ca10: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
ca20: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
ca30: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
ca40: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
ca50: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca60: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
ca70: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
ca80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
ca90: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
caa0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
cab0: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
cac0: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cae0: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
caf0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
cb00: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
cb10: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
cb20: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
cb30: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
cb40: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
cb50: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
cb60: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
cb70: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
cb80: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
cb90: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
cba0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
cbb0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
cbc0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
cbd0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
cbe0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
cbf0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
cc00: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
cc10: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
cc20: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
cc30: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
cc40: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
cc50: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
cc60: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
cc70: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
cc80: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
cc90: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
cca0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
ccb0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
ccc0: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
ccd0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
cce0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
ccf0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
cd00: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
cd10: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
cd20: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
cd30: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
cd40: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
cd50: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
cd60: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
cd70: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
cd80: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
cd90: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
cda0: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
cdb0: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
cdc0: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
cdd0: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
cde0: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
cdf0: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
ce00: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
ce10: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
ce20: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
ce30: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
ce40: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
ce50: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
ce60: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
ce70: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
ce80: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
ce90: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
cea0: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
ceb0: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
cec0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
ced0: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
cee0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
cef0: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
cf00: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
cf10: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
cf20: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
cf30: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
cf40: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
cf50: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
cf60: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
cf70: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
cf80: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
cf90: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
cfa0: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
cfb0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
cfc0: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
cfd0: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
cfe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cff0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
d000: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
d010: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
d020: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
d030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d040: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
d050: 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  0004 /* Candidat
d060: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
d070: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
d080: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d090: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
d0a0: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
d0b0: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
d0c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
d0d0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
d0e0: 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f  PHEM    0x0010 /
d0f0: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
d100: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
d110: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d120: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
d130: 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  x0020 /* sqlite3
d140: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
d150: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
d160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d170: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
d180: 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0040 /* Built-
d190: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
d1a0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
d1b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
d1c0: 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42  OF   0x0080 /* B
d1d0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
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 55 4e 54 20 20 20 20 30 78 30 31 30 30  _COUNT    0x0100
d210: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
d220: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
d230: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d240: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
d250: 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0200 /* Built-
d260: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
d270: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
d280: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d290: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30  _UNLIKELY 0x0400
d2a0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c   /* Built-in unl
d2b0: 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e  ikely() function
d2c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d2d0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
d2e0: 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74   0x0800 /* Const
d2f0: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
d300: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
d310: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
d320: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
d330: 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65    0x1000 /* True
d340: 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d   for min() and m
d350: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20  ax() aggregates 
d360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d370: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20  E_FUNC_SLOCHNG  
d380: 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20  0x2000 /* "Slow 
d390: 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63  Change". Value c
d3a0: 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61  onstant during a
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71       ** single q
d3e0: 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61  uery - might cha
d3f0: 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f  nge over time */
d400: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
d410: 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72  owing three macr
d420: 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20  os, FUNCTION(), 
d430: 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41  LIKEFUNC() and A
d440: 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a  GGREGATE() are.*
d450: 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  * used to create
d460: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
d470: 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65  s for the FuncDe
d480: 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a  f structures..**
d490: 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a  .**   FUNCTION(z
d4a0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d4b0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
d4c0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
d4d0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
d4e0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
d4f0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
d500: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70  Name .**     imp
d510: 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
d520: 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
d530: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
d540: 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
d550: 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
d560: 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
d570: 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
d580: 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
d590: 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
d5a0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
d5b0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
d5c0: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
d5d0: 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67  . If .**     arg
d5e0: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
d5f0: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
d600: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d610: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
d620: 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
d630: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
d640: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
d650: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
d660: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
d670: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
d680: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
d690: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
d6a0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
d6b0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
d6c0: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
d6d0: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
d6e0: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
d6f0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
d700: 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
d710: 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
d720: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
d730: 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
d740: 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
d750: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
d760: 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
d770: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
d780: 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
d790: 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
d7a0: 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
d7b0: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41  query..**.**   A
d7c0: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
d7d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d7e0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
d7f0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
d800: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
d810: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
d820: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
d830: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
d840: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
d850: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
d860: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
d870: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
d880: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
d890: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
d8a0: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
d8b0: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
d8c0: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
d8d0: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
d8e0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
d8f0: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
d900: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
d910: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
d920: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
d930: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
d940: 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  e .**     that a
d950: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
d960: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
d970: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
d980: 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20  ll to C .**     
d990: 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
d9a0: 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
d9b0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
d9c0: 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
d9d0: 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
d9e0: 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
d9f0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
da00: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
da10: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
da20: 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
da30: 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
da40: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
da50: 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
da60: 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
da70: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
da80: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
da90: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
daa0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
dab0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
dac0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
dad0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
dae0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
daf0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
db00: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
db10: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
db20: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  , 0}.#define VFU
db30: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
db40: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
db50: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
db60: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
db70: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
db80: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
db90: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
dba0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
dbb0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
dbc0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 44 46 55  , 0}.#define DFU
dbd0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
dbe0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
dbf0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
dc00: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
dc10: 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
dc20: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
dc30: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
dc40: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
dc50: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
dc60: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
dc70: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
dc80: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
dc90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
dca0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
dcb0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
dcc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
dcd0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
dce0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
dcf0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
dd00: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
dd10: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
dd20: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
dd30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dd40: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
dd50: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
dd60: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
dd70: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
dd80: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
dd90: 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
dda0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
ddb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
ddc0: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
ddd0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
dde0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
ddf0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
de00: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
de10: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
de20: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
de30: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
de40: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
de50: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
de60: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
de70: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
de80: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
de90: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
dea0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
deb0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dec0: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
ded0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
dee0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
def0: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
df00: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
df10: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66  #zName,0,0}.#def
df20: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
df30: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
df40: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
df50: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
df60: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
df70: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
df80: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
df90: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
dfa0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
dfb0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
dfc0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
dfd0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
dfe0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
dff0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
e000: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
e010: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
e020: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
e030: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
e040: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
e050: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
e060: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
e070: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
e080: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
e090: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
e0a0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
e0b0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
e0c0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
e0d0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
e0e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
e110: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
e120: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
e130: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
e160: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
e170: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
e180: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e1a0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
e1b0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
e1c0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
e1d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e1e0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
e1f0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
e200: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
e210: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
e220: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
e230: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
e240: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
e250: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
e260: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
e270: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
e280: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
e290: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
e2a0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
e2b0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
e2c0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
e2d0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
e2e0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
e2f0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
e300: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
e310: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
e320: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
e330: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
e340: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
e350: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
e360: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
e370: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
e380: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
e390: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
e3a0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
e3b0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
e3c0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
e3d0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
e3e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
e3f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e400: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
e410: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
e420: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
e430: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
e460: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
e470: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
e480: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
e490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
e4a0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
e4b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
e4c0: 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20  able *pEpoTab;  
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73      /* Eponymous
e4f0: 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20   table for this 
e500: 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  module */.};../*
e510: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
e520: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
e530: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
e540: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
e550: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
e560: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
e570: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
e580: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
e590: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
e5a0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
e5b0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
e5c0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
e5d0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
e5e0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
e5f0: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
e600: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
e610: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
e620: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
e630: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
e640: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
e650: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
e660: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
e670: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
e680: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
e690: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
e6a0: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
e6b0: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
e6c0: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
e6d0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
e6e0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
e6f0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
e700: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
e710: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
e720: 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
e730: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
e740: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
e750: 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75  .  INT==1 */.  u
e760: 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
e770: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
e780: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
e790: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
e7a0: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
e7b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
e7c0: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
e7d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
e7e0: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
e7f0: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
e800: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
e810: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
e820: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
e830: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
e840: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
e850: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
e860: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
e870: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
e880: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
e890: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
e8a0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e8b0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
e8c0: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
e8d0: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
e8e0: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
e8f0: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
e900: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
e910: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
e920: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
e930: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
e940: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
e950: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
e960: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
e970: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e980: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
e990: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
e9a0: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
e9b0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
e9c0: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
e9d0: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
e9e0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
e9f0: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
ea00: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
ea10: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
ea20: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ea30: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
ea40: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
ea50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
ea60: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
ea70: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
ea80: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
ea90: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
eaa0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
eab0: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
eac0: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
ead0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
eae0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
eaf0: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
eb00: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
eb10: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
eb20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
eb30: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
eb40: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
eb50: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
eb60: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
eb70: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
eb80: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
eb90: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
eba0: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
ebb0: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
ebc0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
ebd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ebe0: 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d  E_SO_UNDEFINED -
ebf0: 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64  1 /* No sort ord
ec00: 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  er specified */.
ec10: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
ec20: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
ec30: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
ec40: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
ec50: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
ec60: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
ec70: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
ec80: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
ec90: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
eca0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
ecb0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
ecc0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
ecd0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
ece0: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
ecf0: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
ed00: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
ed10: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
ed20: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
ed30: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
ed40: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
ed50: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
ed60: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
ed70: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
ed80: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
ed90: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
eda0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
edb0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
edc0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
edd0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
ede0: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
edf0: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
ee00: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
ee10: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
ee20: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
ee30: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
ee40: 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
ee50: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
ee60: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
ee70: 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
ee80: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
ee90: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
eea0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
eeb0: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
eec0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
eed0: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
eee0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
eef0: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
ef00: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
ef10: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
ef20: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
ef30: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
ef40: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
ef50: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
ef60: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
ef70: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
ef80: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
ef90: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
efa0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
efb0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
efc0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
efd0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
efe0: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
eff0: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
f000: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
f010: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
f020: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
f030: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
f040: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
f050: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
f060: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
f070: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
f080: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
f090: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
f0a0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
f0b0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
f0c0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
f0d0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
f0e0: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
f0f0: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
f100: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
f110: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
f120: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
f130: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
f140: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
f150: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f160: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
f170: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
f180: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
f190: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
f1a0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
f1b0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
f1c0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
f1d0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
f1e0: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
f1f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
f200: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
f210: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
f220: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
f230: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
f240: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
f250: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
f260: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
f270: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
f280: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
f290: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
f2a0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
f2b0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
f2c0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
f2d0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
f2e0: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
f2f0: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
f300: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
f310: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
f320: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
f330: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
f340: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
f350: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f360: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
f370: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
f380: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
f390: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f3a0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
f3b0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
f3c0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
f3d0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
f3e0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
f3f0: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
f400: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
f410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
f420: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
f430: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
f440: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
f450: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
f460: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
f470: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
f480: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
f490: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
f4a0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
f4b0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
f4c0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
f4d0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
f4e0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
f4f0: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
f500: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
f510: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
f520: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
f530: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
f540: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
f550: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
f560: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
f570: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
f580: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
f590: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
f5a0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
f5b0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
f5c0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
f5d0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
f5e0: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
f5f0: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
f600: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
f610: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
f620: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
f630: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
f640: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
f650: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
f660: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
f670: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
f680: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
f690: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
f6a0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
f6b0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
f6c0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
f6d0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
f6e0: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
f6f0: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
f700: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
f710: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
f720: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
f730: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
f740: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
f750: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
f760: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
f770: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
f780: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
f790: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
f7a0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
f7b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f7c0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
f7d0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
f7e0: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
f7f0: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
f800: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
f810: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
f820: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
f830: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
f840: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
f850: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
f860: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
f870: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
f880: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
f890: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
f8a0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
f8b0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
f8c0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
f8d0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
f8e0: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
f8f0: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
f900: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
f910: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
f920: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
f930: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
f940: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
f950: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
f960: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
f970: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
f980: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
f990: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
f9a0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
f9b0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
f9c0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
f9d0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
f9e0: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
f9f0: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
fa00: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
fa10: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
fa20: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
fa30: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
fa40: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
fa50: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
fa60: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
fa70: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
fa80: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
fa90: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
faa0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
fab0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
fac0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
fad0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
fae0: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
faf0: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
fb00: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
fb10: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
fb20: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
fb30: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
fb40: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
fb50: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
fb60: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
fb70: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
fb80: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
fb90: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
fba0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
fbb0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
fbc0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
fbd0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
fbe0: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
fbf0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
fc00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
fc10: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
fc20: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
fc30: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
fc40: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
fc50: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
fc60: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
fc70: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
fc80: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
fc90: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
fca0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
fcb0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
fcc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fcd0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
fce0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
fcf0: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
fd00: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
fd10: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
fd20: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
fd30: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
fd40: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
fd50: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
fd60: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
fd70: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
fd80: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
fd90: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
fda0: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
fdb0: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
fdc0: 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
fdd0: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
fde0: 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
fdf0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
fe00: 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
fe10: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
fe20: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
fe30: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
fe40: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
fe50: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
fe60: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
fe70: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
fe80: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
fe90: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
fea0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
feb0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
fec0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
fed0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
fee0: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
fef0: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
ff00: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
ff10: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
ff20: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
ff30: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
ff40: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
ff50: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
ff60: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
ff70: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
ff80: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
ff90: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
ffa0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
ffb0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
ffc0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
ffd0: 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
ffe0: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
fff0: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
10000 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10020 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
10030 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
10040 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
10050 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
10060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
10070 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
10080 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
10090 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
100a0 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
100b0 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
100c0 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
100d0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
100e0 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
100f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
10100 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
10110 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65  ble */.  u16 nRe
10120 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
10130 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
10140 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
10150 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
10160 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
10170 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
10180 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
10190 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
101a0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
101b0 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
101c0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
101d0 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
101e0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
101f0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
10200 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
10210 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
10220 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
10230 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
10240 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
10250 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  f.  u8 tabFlags;
10260 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
10270 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
10280 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
10290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
102a0 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
102b0 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
102c0 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
102d0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
102e0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
102f0 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
10300 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
10310 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
10320 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
10330 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
10340 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
10350 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
10360 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
10370 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
10380 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
10390 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
103a0 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
103b0 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
103c0 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
103d0 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
103e0 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
103f0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
10400 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
10410 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
10420 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
10430 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
10440 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
10450 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
10460 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
10470 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
10480 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
10490 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
104a0 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
104b0 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
104c0 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
104d0 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
104e0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
104f0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
10500 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
10510 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
10520 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
10530 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
10540 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
10550 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
10560 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
10570 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
10580 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
10590 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
105a0 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
105b0 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
105c0 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
105d0 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
105e0 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
105f0 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
10600 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
10610 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
10620 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
10630 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
10640 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
10650 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
10660 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
10670 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
10680 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
10690 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
106a0 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
106b0 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
106c0 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
106d0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
106e0 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
106f0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10700 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
10710 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
10720 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
10730 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
10740 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
10750 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
10760 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
10770 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
10780 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
10790 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
107a0 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
107b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
107c0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
107d0 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
107e0 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
107f0 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  .  PRIMARY KEY i
10800 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65  s the key */.#de
10810 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c  fine TF_NoVisibl
10820 65 52 6f 77 69 64 20 20 30 78 34 30 20 20 20 20  eRowid  0x40    
10830 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
10840 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
10850 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
10860 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
10870 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0x80    /* Out-o
10880 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
10890 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  olumns */.../*.*
108a0 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
108b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
108c0 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
108d0 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
108e0 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
108f0 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
10900 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
10910 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
10920 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
10930 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
10940 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
10950 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
10960 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
10970 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
10980 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
10990 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
109a0 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
109b0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
109c0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
109d0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
109e0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
109f0 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
10a00 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
10a10 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
10a20 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
10a30 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
10a40 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
10a50 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
10a60 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
10a70 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
10a80 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
10a90 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64  outRowid)==0).#d
10aa0 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77  efine VisibleRow
10ab0 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62  id(X) (((X)->tab
10ac0 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73  Flags & TF_NoVis
10ad0 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a  ibleRowid)==0)..
10ae0 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
10af0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
10b00 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
10b10 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10b20 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
10b30 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
10b40 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
10b50 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
10b60 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
10b70 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
10b80 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
10b90 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10ba0 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
10bb0 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
10bc0 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
10bd0 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
10be0 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
10bf0 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
10c00 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
10c10 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
10c20 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
10c30 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
10c40 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
10c50 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
10c60 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
10c70 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
10c80 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
10c90 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
10ca0 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
10cb0 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
10cc0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
10cd0 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
10ce0 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
10cf0 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61  ** Equivalent na
10d00 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  mes:.**.**     f
10d10 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69  rom-table == chi
10d20 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  ld-table.**     
10d30 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61    to-table == pa
10d40 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a  rent-table.**.**
10d50 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
10d60 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
10d70 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
10d80 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10d90 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
10da0 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
10db0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
10dc0 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
10dd0 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
10de0 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
10df0 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
10e00 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
10e10 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
10e20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
10e30 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f  **.** The list o
10e40 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f  f all parents fo
10e50 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20  r child Table X 
10e60 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b  is held at X.pFK
10e70 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74  ey..**.** A list
10e80 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e   of all children
10e90 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d   for a table nam
10ea0 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68  ed Z (which migh
10eb0 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74  t not even exist
10ec0 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20  ).** is held in 
10ed0 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20  Schema.fkeyHash 
10ee0 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20  with a hash key 
10ef0 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  of Z..*/.struct 
10f00 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
10f10 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
10f20 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
10f30 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
10f40 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
10f50 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
10f60 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
10f70 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73   FKey with the s
10f80 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65  ame in pFrom. Ne
10f90 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72  xt parent of pFr
10fa0 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
10fb0 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
10fc0 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
10fd0 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
10fe0 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
10ff0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
11000 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  To;    /* Next w
11010 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
11020 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20  . Next child of 
11030 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  zTo. */.  FKey *
11040 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50  pPrevTo;    /* P
11050 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65  revious with the
11060 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69   same zTo */.  i
11070 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
11080 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11090 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
110a0 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
110b0 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
110c0 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
110d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
110e0 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
110f0 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
11100 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
11110 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
11120 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
11130 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
11140 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
11150 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
11160 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
11170 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20  [2];/* Triggers 
11180 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63  for aAction[] ac
11190 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
111a0 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20  t sColMap {     
111b0 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
111c0 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
111d0 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
111e0 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
111f0 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  om;            /
11200 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
11210 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
11220 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
11230 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11240 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
11250 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50  .  If NULL use P
11260 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
11270 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
11280 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
11290 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
112a0 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d  Col columns */.}
112b0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20  ;../*.** SQLite 
112c0 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69  supports many di
112d0 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20  fferent ways to 
112e0 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72  resolve a constr
112f0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20  aint.** error.  
11300 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
11310 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ing means that a
11320 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
11330 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20  ation.** causes 
11340 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
11350 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c   process to fail
11360 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72   and for the cur
11370 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
11380 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  .** to be rolled
11390 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72   back.  ABORT pr
113a0 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
113b0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
113c0 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73  process.** fails
113d0 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63   and any prior c
113e0 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74  hanges from that
113f0 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   one operation a
11400 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a  re backed out,.*
11410 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61  * but the transa
11420 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c  ction is not rol
11430 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20  led back.  FAIL 
11440 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
11450 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65   that.** the ope
11460 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  ration in progre
11470 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74  ss stops and ret
11480 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f  urns an error co
11490 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a  de.  But prior.*
114a0 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f  * changes due to
114b0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
114c0 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  ion are not back
114d0 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f  ed out and no ro
114e0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73  llback.** occurs
114f0 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20  .  IGNORE means 
11500 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75  that the particu
11510 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75  lar row that cau
11520 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  sed the constrai
11530 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e  nt.** error is n
11540 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  ot inserted or u
11550 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73  pdated.  Process
11560 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
11570 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73  d no error.** is
11580 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c   returned.  REPL
11590 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70  ACE means that p
115a0 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
115b0 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61  ase rows that ca
115c0 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45  used.** a UNIQUE
115d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
115e0 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65  ation are remove
115f0 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  d so that the ne
11600 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75  w insert or.** u
11610 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65  pdate can procee
11620 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
11630 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
11640 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
11650 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43  d..**.** RESTRIC
11660 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20  T, SETNULL, and 
11670 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20  CASCADE actions 
11680 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f  apply only to fo
11690 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52  reign keys..** R
116a0 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73  ESTRICT is the s
116b0 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72  ame as ABORT for
116c0 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69   IMMEDIATE forei
116d0 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a  gn keys and the.
116e0 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42  ** same as ROLLB
116f0 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ACK for DEFERRED
11700 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20   keys.  SETNULL 
11710 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66  means that the f
11720 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73  oreign.** key is
11730 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43   set to NULL.  C
11740 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61  ASCADE means tha
11750 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50  t a DELETE or UP
11760 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72  DATE of the.** r
11770 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
11780 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65  row is propagate
11790 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74  d into the row t
117a0 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a  hat holds the.**
117b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a   foreign key..**
117c0 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69   .** The followi
117d0 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75  ng symbolic valu
117e0 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  es are used to r
117f0 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65  ecord which type
11800 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f  .** of action to
11810 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   take..*/.#defin
11820 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20  e OE_None     0 
11830 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f    /* There is no
11840 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63   constraint to c
11850 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  heck */.#define 
11860 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20  OE_Rollback 1   
11870 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72  /* Fail the oper
11880 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61  ation and rollba
11890 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
118a0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
118b0 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a  _Abort    2   /*
118c0 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65   Back out change
118d0 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c  s but do no roll
118e0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
118f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46   */.#define OE_F
11900 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53  ail     3   /* S
11910 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f  top the operatio
11920 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20  n but leave all 
11930 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f  prior changes */
11940 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f  .#define OE_Igno
11950 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f  re   4   /* Igno
11960 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f  re the error. Do
11970 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45   not do the INSE
11980 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
11990 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61  #define OE_Repla
119a0 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74  ce  5   /* Delet
119b0 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72  e existing recor
119c0 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52  d, then do INSER
119d0 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a  T or UPDATE */..
119e0 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72  #define OE_Restr
119f0 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62  ict 6   /* OE_Ab
11a00 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ort for IMMEDIAT
11a10 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66  E, OE_Rollback f
11a20 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23  or DEFERRED */.#
11a30 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c  define OE_SetNul
11a40 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68  l  7   /* Set th
11a50 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
11a60 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23  lue to NULL */.#
11a70 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c  define OE_SetDfl
11a80 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68  t  8   /* Set th
11a90 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
11aa0 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75  lue to its defau
11ab0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  lt */.#define OE
11ac0 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a  _Cascade  9   /*
11ad0 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61   Cascade the cha
11ae0 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  nges */..#define
11af0 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20   OE_Default  10 
11b00 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20   /* Do whatever 
11b10 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
11b20 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  on is */.../*.**
11b30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11b40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11b50 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
11b60 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  d as the first.*
11b70 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  * argument to sq
11b80 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70  lite3VdbeKeyComp
11b90 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20  are and is used 
11ba0 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a  to control the .
11bb0 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
11bc0 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
11bd0 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
11be0 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
11bf0 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
11c00 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
11c10 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
11c20 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
11c30 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
11c40 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
11c50 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
11c60 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
11c70 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
11c80 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
11c90 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
11ca0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11cb0 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
11cc0 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
11cd0 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11cf0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
11d00 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
11d10 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
11d20 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
11d30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11d40 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
11d50 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11d60 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20    u16 nXField;  
11d70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11d80 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e  of columns beyon
11d90 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e  d the key column
11da0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
11db0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
11dc0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11dd0 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
11de0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
11df0 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
11e00 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
11e10 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
11e20 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
11e30 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
11e40 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
11e50 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
11e60 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
11e70 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
11e80 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
11e90 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
11ea0 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
11eb0 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
11ec0 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
11ed0 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
11ee0 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
11ef0 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
11f00 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
11f10 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
11f20 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
11f30 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
11f40 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
11f50 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
11f60 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
11f70 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
11f80 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
11f90 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
11fa0 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
11fb0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
11fc0 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
11fd0 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
11fe0 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
11ff0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
12000 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
12010 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
12020 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
12030 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
12040 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
12050 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
12060 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
12070 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
12080 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
12090 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
120a0 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
120b0 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
120c0 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
120d0 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
120e0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
120f0 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
12100 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
12110 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
12120 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
12130 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
12140 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
12150 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
12160 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
12170 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
12180 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
12190 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
121a0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
121b0 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
121c0 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
121d0 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
121e0 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
121f0 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
12200 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
12210 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
12220 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
12230 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
12240 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
12250 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
12260 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
12270 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
12280 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
12290 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
122a0 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
122b0 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
122c0 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
122d0 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
122e0 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
122f0 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
12300 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
12310 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
12320 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
12330 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
12340 6f 20 2d 31 20 74 6f 20 0a 2a 2a 20 63 61 75 73  o -1 to .** caus
12350 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20  e the search to 
12360 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61  find the last ma
12370 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61  tch, or +1 to ca
12380 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
12390 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69  o.** find the fi
123a0 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a  rst match..**.**
123b0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
123c0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69  son functions wi
123d0 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f  ll set eqSeen to
123e0 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76   true if they ev
123f0 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71  er.** get and eq
12400 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e  ual results when
12410 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20   comparing this 
12420 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62  structure to a b
12430 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a  -tree record..**
12440 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   When default_rc
12450 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20  !=0, the search 
12460 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20  might end up on 
12470 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
12480 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65  iately.** before
12490 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
124a0 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   or immediately 
124b0 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d  after the last m
124c0 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71  atch.  The.** eq
124d0 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20  Seen field will 
124e0 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72  indicate whether
124f0 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74   or not an exact
12500 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e   match exists in
12510 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a   the.** b-tree..
12520 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
12530 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
12540 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
12550 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
12560 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
12570 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65  ormation */.  Me
12580 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
12590 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
125a0 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
125b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
125c0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d  f entries in apM
125d0 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66  em[] */.  i8 def
125e0 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a  ault_rc;      /*
125f0 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
12600 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65  lt if keys are e
12610 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72  qual */.  u8 err
12620 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Code;         /*
12630 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20   Error detected 
12640 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72  by xRecordCompar
12650 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f  e (CORRUPT or NO
12660 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b  MEM) */.  i8 r1;
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12680 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
12690 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
126a0 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20  */.  i8 r2;     
126b0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
126c0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
126d0 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20 20  rhs < lhs) */.  
126e0 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20  u8 eqSeen;      
126f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
12700 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61  n equality compa
12710 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73  rison has been s
12720 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  een */.};.../*.*
12730 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
12740 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
12750 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
12760 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
12770 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
12780 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
12790 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
127a0 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
127b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
127c0 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
127d0 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
127e0 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
127f0 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
12800 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
12810 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
12820 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
12830 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
12840 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12850 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
12860 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
12870 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
12880 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
12890 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
128a0 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
128b0 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
128c0 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
128d0 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
128e0 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
128f0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
12900 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
12910 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
12920 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
12930 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
12940 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
12950 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
12960 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
12970 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
12980 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
12990 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
129a0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
129b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
129c0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
129d0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
129e0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
129f0 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
12a00 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
12a10 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
12a20 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
12a30 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
12a40 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
12a50 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
12a60 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
12a70 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
12a80 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
12a90 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
12aa0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
12ab0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
12ac0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
12ad0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
12ae0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
12af0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
12b00 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
12b10 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
12b20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
12b30 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
12b40 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
12b50 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
12b60 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
12b70 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
12b80 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
12b90 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
12ba0 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
12bb0 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
12bc0 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
12bd0 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
12be0 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
12bf0 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
12c00 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
12c10 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
12c20 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
12c30 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
12c40 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
12c50 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
12c60 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
12c70 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
12c80 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
12c90 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
12ca0 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
12cb0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
12cc0 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
12cd0 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
12ce0 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
12cf0 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
12d00 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
12d10 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
12d20 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
12d30 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
12d40 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
12d50 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
12d60 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
12d70 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
12d80 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
12d90 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
12da0 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
12db0 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
12dc0 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
12dd0 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
12de0 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
12df0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
12e00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
12e10 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
12e20 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
12e30 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
12e40 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
12e50 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
12e60 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
12e70 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
12e80 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
12e90 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
12ea0 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
12eb0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
12ec0 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
12ed0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
12ee0 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
12ef0 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
12f00 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
12f10 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
12f20 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
12f30 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
12f40 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
12f50 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
12f60 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
12f70 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
12f80 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
12f90 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
12fa0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
12fb0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
12fc0 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
12fd0 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
12fe0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
12ff0 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
13000 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
13010 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
13020 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
13030 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
13040 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
13050 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
13060 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
13070 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
13080 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
13090 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
130a0 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
130b0 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
130c0 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
130d0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
130e0 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
130f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
13100 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
13110 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
13120 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
13130 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
13140 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
13150 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
13160 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
13170 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
13180 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13190 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
131a0 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
131b0 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
131c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
131d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
131e0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
131f0 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
13200 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
13210 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
13220 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
13230 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
13240 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
13250 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
13260 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
13270 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
13280 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
13290 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
132a0 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
132b0 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
132c0 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
132d0 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
132e0 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
132f0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
13300 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
13310 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
13320 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
13330 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
13340 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
13350 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
13360 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
13370 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
13380 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
13390 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
133a0 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
133b0 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  x */.  unsigned 
133c0 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20  noSkipScan:1;   
133d0 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f  /* Do not try to
133e0 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69   use skip-scan i
133f0 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66  f true */.#ifdef
13400 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
13410 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
13420 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
13430 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13440 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
13450 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
13460 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
13470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
13480 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
13490 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
134a0 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
134b0 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
134c0 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
134d0 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
134e0 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
134f0 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
13500 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
13510 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
13520 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
13530 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
13540 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
13550 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
13560 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
13570 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
13580 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
13590 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
135a0 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
135b0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
135c0 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  dex */.#endif.};
135d0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
135e0 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
135f0 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
13600 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
13610 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
13620 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
13630 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
13640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
13650 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
13660 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
13670 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
13680 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
13690 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
136a0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
136b0 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
136c0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
136d0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
136e0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
136f0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
13700 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
13710 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
13720 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
13730 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
13740 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
13750 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
13760 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
13770 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
13780 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
13790 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
137a0 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
137b0 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
137c0 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
137d0 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
137e0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
137f0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
13800 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
13810 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
13820 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
13830 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
13840 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
13850 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
13860 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
13870 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
13880 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
13890 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
138a0 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
138b0 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
138c0 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
138d0 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
138e0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
138f0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
13900 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
13910 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
13920 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
13930 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
13940 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
13950 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
13960 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
13970 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
13980 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
13990 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
139a0 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
139b0 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
139c0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
139d0 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
139e0 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
139f0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
13a00 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
13a10 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
13a20 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
13a30 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
13a40 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
13a50 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
13a60 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
13a70 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
13a80 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
13a90 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
13aa0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
13ab0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
13ac0 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
13ad0 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
13ae0 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
13af0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
13b00 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
13b10 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
13b20 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
13b30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
13b40 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
13b50 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
13b60 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
13b70 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
13b80 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
13b90 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
13ba0 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
13bb0 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
13bc0 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
13bd0 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
13be0 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
13bf0 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
13c00 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
13c10 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
13c20 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
13c30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
13c40 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
13c50 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
13c60 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
13c70 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
13c80 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
13c90 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
13ca0 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
13cb0 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
13cc0 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
13cd0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
13ce0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
13cf0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
13d00 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
13d10 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
13d20 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
13d30 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
13d40 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
13d50 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
13d60 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
13d70 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
13d80 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
13d90 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
13da0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
13db0 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
13dc0 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
13dd0 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
13de0 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
13df0 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
13e00 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
13e10 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
13e20 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
13e30 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
13e40 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
13e50 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
13e60 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
13e70 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
13e80 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
13e90 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
13ea0 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
13eb0 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
13ec0 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
13ed0 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
13ee0 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
13ef0 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
13f00 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
13f10 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
13f20 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
13f30 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
13f40 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
13f50 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
13f60 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
13f70 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
13fa0 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
13fb0 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
13fc0 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
13fd0 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
13fe0 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
13ff0 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
14000 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
14010 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
14040 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
14050 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
14060 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
14070 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
14080 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
14090 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
140a0 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
140b0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
140c0 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
140d0 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
140e0 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
140f0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
14100 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
14110 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
14120 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20  mnReg, mxReg;   
14130 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20      /* Range of 
14140 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
14150 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64  ted for aCol and
14160 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72   aFunc */.  Expr
14170 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
14180 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
14190 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
141a0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
141b0 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
141c0 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
141d0 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
141e0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
141f0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
14200 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
14210 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
14220 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
14230 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
14240 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
14250 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
14260 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
14270 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
14280 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
14290 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
142a0 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
142b0 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
142c0 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
142d0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
142e0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
142f0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
14300 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
14310 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
14320 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
14330 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
14340 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
14350 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
14360 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
14370 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
14380 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
14390 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
143a0 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
143b0 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
143c0 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
143d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
143e0 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
143f0 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
14400 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
14430 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
14440 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
14450 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
14480 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
14490 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
144a0 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
144b0 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
144c0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
144d0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
144e0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
144f0 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
14500 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
14510 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
14520 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
14530 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
14540 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
14550 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
14560 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
14570 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
14580 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
14590 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
145a0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
145b0 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
145c0 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
145d0 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
145e0 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
145f0 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
14600 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
14610 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14620 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
14630 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
14640 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
14650 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
14660 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
14670 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
14680 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
14690 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
146a0 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
146b0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
146c0 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
146d0 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
146e0 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
146f0 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
14700 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
14710 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
14720 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
14730 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
14740 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
14750 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
14760 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
14770 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
14780 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
14790 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
147a0 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
147b0 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
147c0 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
147d0 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
147e0 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
147f0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
14800 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
14810 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
14820 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
14830 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
14840 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
14850 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
14860 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
14870 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
14880 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
14890 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
148a0 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
148b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
148c0 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
148d0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
148e0 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
148f0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
14900 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
14910 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
14920 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
14930 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
14940 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
14950 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
14960 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
14970 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
14980 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
14990 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
149a0 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
149b0 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
149c0 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
149d0 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
149e0 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
149f0 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
14a00 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
14a10 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
14a20 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
14a30 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
14a40 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
14a50 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
14a60 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
14a70 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
14a80 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f  BLOB, .** or TK_
14a90 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
14aa0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
14ab0 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
14ac0 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
14ad0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
14ae0 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
14af0 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
14b00 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
14b10 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a   contains the .*
14b20 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
14b30 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
14b40 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
14b50 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
14b60 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
14b70 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
14b80 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
14b90 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
14ba0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
14bb0 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
14bc0 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
14bd0 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
14be0 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
14bf0 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
14c00 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
14c10 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
14c20 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
14c30 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
14c40 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
14c50 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
14c60 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
14c70 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
14c80 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
14c90 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
14ca0 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
14cb0 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
14cc0 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
14cd0 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
14ce0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
14cf0 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
14d00 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
14d10 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
14d20 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
14d30 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
14d40 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
14d50 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
14d60 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
14d70 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
14d80 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
14d90 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
14da0 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64  ist is .** valid
14db0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
14dc0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14dd0 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
14de0 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
14df0 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
14e00 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
14e10 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
14e20 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
14e30 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
14e40 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
14e50 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
14e60 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
14e70 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
14e80 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
14e90 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
14ea0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
14eb0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
14ec0 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
14ed0 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
14ee0 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
14ef0 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
14f00 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
14f10 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
14f20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
14f30 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
14f40 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
14f50 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
14f60 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
14f70 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
14f80 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
14f90 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
14fa0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14fb0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
14fc0 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
14fd0 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  a question mark 
14fe0 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
14ff0 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
15000 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
15010 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
15020 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  s the index .** 
15030 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
15040 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
15050 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
15060 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
15070 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
15080 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
15090 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
150a0 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
150b0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
150c0 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
150d0 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
150e0 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
150f0 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
15100 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
15110 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
15120 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
15130 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
15140 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
15150 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
15160 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
15170 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
15180 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
15190 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
151a0 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
151b0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
151c0 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
151d0 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
151e0 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
151f0 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
15200 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
15210 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
15220 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
15230 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
15240 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
15250 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
15260 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
15270 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
15280 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
15290 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
152a0 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
152b0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
152c0 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
152d0 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
152e0 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
152f0 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
15300 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
15310 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
15320 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
15330 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
15340 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
15350 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
15360 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
15370 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
15380 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
15390 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
153a0 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
153b0 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
153c0 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
153d0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
153e0 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
153f0 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
15400 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
15410 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
15420 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
15430 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
15440 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
15450 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
15460 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
15470 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
15480 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
15490 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
154a0 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
154b0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
154c0 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
154d0 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
154e0 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
154f0 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
15500 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
15510 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
15520 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
15530 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
15540 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
15550 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
15560 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
15570 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
15580 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
15590 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
155a0 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
155b0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
155c0 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
155d0 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
155e0 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
155f0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
15600 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
15610 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
15620 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
15630 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
15640 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
15650 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
15660 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
15670 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
15680 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
15690 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
156a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
156b0 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
156c0 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
156d0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
156e0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
156f0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
15700 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
15710 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
15720 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
15730 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
15740 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15750 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15760 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15770 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15780 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
15790 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
157a0 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a  ction. .  ******
157b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
157c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
157d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
157e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
157f0 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
15800 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
15810 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
15820 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
15830 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
15840 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
15850 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
15860 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
15870 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
15880 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
15890 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
158a0 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
158b0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
158c0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
158d0 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
158e0 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
158f0 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
15900 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
15910 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
15920 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
15930 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
15940 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
15950 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
15960 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
15970 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
15980 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
15990 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
159a0 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
159b0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
159c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15a00 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
15a10 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
15a20 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
15a30 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
15a40 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
15a50 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
15a60 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
15a70 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
15a80 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
15a90 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
15aa0 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
15ab0 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
15ae0 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
15af0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
15b00 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
15b10 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
15b20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
15b50 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32  ikely:  13421772
15b60 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  8 times likeliho
15b70 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  od */.  ynVar iC
15b80 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
15b90 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
15ba0 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
15bb0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
15be0 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
15bf0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
15c00 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15c20 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
15c30 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
15c40 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
15c50 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
15c60 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
15c70 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
15c80 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
15c90 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
15ca0 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
15cb0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
15cc0 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
15cd0 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
15d00 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
15d10 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
15d20 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15d40 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
15d50 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
15d60 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
15d70 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
15d80 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
15d90 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
15da0 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
15db0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
15dc0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
15dd0 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
15de0 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
15df0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
15e00 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
15e10 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
15e20 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
15e30 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
15e40 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
15e50 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
15e60 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20  tes in ON/USING 
15e70 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20  clause of outer 
15e80 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
15e90 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
15ea0 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
15eb0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
15ec0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15ed0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
15ee0 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30  Resolved  0x0000
15ef0 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  04 /* IDs have b
15f00 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
15f10 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
15f20 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
15f30 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72  0x000008 /* Expr
15f40 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
15f50 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
15f60 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
15f70 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
15f80 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
15f90 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
15fa0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
15fb0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
15fc0 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
15fd0 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
15fe0 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
15ff0 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
16000 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
16010 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
16020 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
16030 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
16040 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
16050 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
16060 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
16070 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
16080 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
16090 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
160a0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
160b0 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
160c0 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
160d0 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
160e0 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
160f0 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
16100 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
16110 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
16120 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
16130 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
16140 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
16150 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
16160 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
16170 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
16180 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
16190 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
161a0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
161b0 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
161c0 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
161d0 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
161e0 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
161f0 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
16200 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
16210 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
16220 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
16230 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
16240 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
16250 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
16260 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
16270 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
16280 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
16290 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
162a0 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
162b0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
162c0 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
162d0 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
162e0 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
162f0 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
16300 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
16310 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
16320 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
16330 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
16340 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
16350 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
16360 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
16370 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
16380 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
16390 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
163a0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
163b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
163c0 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20  stFunc 0x080000 
163d0 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43  /* A SQLITE_FUNC
163e0 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c  _CONSTANT or _SL
163f0 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a  OCHNG function *
16400 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e  /.#define EP_Can
16410 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20  BeNull 0x100000 
16420 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64  /* Can be null d
16430 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20  espite NOT NULL 
16440 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
16450 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72  efine EP_Subquer
16460 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54  y  0x200000 /* T
16470 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
16480 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  K_SELECT operato
16490 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
164a0 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30  Alias     0x4000
164b0 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61  00 /* Is an alia
164c0 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73  s for a result s
164d0 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  et column */../*
164e0 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73  .** Combinations
164f0 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   of two or more 
16500 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64  EP_* flags.*/.#d
16510 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
16520 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
16530 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50  P_Subquery) /* P
16540 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62  ropagate these b
16550 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a  its up tree */..
16560 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
16570 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
16580 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
16590 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
165a0 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
165b0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
165c0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
165d0 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
165e0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
165f0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
16600 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
16610 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
16620 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
16630 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
16640 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
16650 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
16660 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
16670 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
16680 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
16690 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
166a0 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
166b0 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
166c0 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
166d0 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
166e0 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
166f0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
16700 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
16710 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
16720 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
16730 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
16740 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
16750 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
16760 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
16770 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
16780 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
16790 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
167a0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
167b0 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
167c0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
167d0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
167e0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
167f0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
16800 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75  al Expr .** stru
16810 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
16820 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
16830 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
16840 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a  in Expr.flags .*
16850 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
16860 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
16870 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
16880 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
16890 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
168a0 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
168b0 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
168c0 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
168d0 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
168e0 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
168f0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
16900 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
16910 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
16920 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
16930 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
16940 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
16950 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
16960 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
16970 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
16980 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
16990 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
169a0 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
169b0 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73  ment .** above s
169c0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
169d0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
169e0 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
169f0 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
16a00 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
16a10 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
16a20 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
16a30 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
16a40 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
16a50 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
16a60 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
16a70 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
16a80 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
16a90 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
16aa0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
16ab0 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
16ac0 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
16ad0 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
16ae0 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
16af0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
16b00 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
16b10 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
16b20 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
16b30 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
16b40 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
16b50 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
16b60 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
16b70 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
16b80 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
16b90 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
16ba0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
16bb0 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
16bc0 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
16bd0 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
16be0 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
16bf0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
16c00 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
16c10 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
16c20 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
16c30 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
16c40 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
16c50 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
16c60 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
16c70 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
16c80 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
16c90 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
16ca0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
16cb0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
16cc0 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
16cd0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
16ce0 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
16cf0 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
16d00 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
16d10 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
16d20 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
16d30 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
16d40 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
16d50 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
16d60 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
16d70 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
16d80 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
16d90 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
16da0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
16db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16dc0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
16dd0 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
16de0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
16df0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
16e00 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
16e10 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
16e20 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
16e30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
16e40 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
16e50 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
16e60 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
16e70 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
16e80 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16e90 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
16ea0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
16eb0 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
16ec0 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
16ed0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
16ee0 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
16ef0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
16f00 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
16f10 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
16f20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
16f30 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
16f40 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
16f50 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
16f60 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
16f70 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
16f80 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
16f90 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
16fa0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
16fb0 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
16fc0 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
16fd0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
16fe0 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
16ff0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
17000 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
17010 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
17020 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
17030 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
17040 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
17050 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
17060 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
17070 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
17080 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
17090 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
170a0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
170b0 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
170c0 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
170d0 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
170e0 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
170f0 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
17100 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
17110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
17120 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
17130 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
17140 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
17150 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
17160 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
17170 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
17180 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
17190 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
171a0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
171b0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
171c0 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
171d0 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
171e0 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
171f0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
17200 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
17210 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
17220 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
17230 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
17240 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
17250 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
17260 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
17270 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
17280 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
17290 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
172a0 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
172b0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
172c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
172d0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
172e0 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
172f0 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
17300 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
17310 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
17320 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
17330 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
17340 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
17350 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
17360 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
17370 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
17380 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
17390 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
173a0 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
173b0 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
173c0 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
173d0 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
173e0 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
173f0 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
17400 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
17410 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
17420 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
17430 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
17440 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
17450 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
17460 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
17470 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
17480 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
17490 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
174a0 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
174b0 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
174c0 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
174d0 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
174e0 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
174f0 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
17500 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
17510 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
17520 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
17530 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
17540 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
17550 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
17560 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
17570 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
17580 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
17590 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
175a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
175b0 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
175c0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
175d0 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
175e0 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
175f0 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
17600 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
17610 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
17620 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
17630 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
17640 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
17650 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
17660 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
17670 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
17680 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
17690 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
176a0 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
176b0 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
176c0 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
176d0 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
176e0 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
176f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
17700 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
17710 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
17720 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
17730 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
17740 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
17750 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
17760 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
17770 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
17780 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
17790 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
177a0 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
177b0 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
177c0 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a  t)1)<<(n))../*.*
177d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
177e0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
177f0 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
17800 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
17810 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
17820 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
17830 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
17840 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
17850 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
17860 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
17870 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
17880 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
17890 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
178a0 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
178b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
178c0 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
178d0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
178e0 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
178f0 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
17900 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
17910 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
17920 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
17930 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
17940 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
17950 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
17960 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
17970 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
17980 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
17990 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
179a0 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
179b0 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
179c0 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
179d0 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
179e0 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
179f0 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
17a00 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
17a10 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
17a20 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
17a30 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
17a40 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
17a50 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
17a60 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
17a70 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
17a80 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
17a90 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
17aa0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
17ab0 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
17ac0 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
17ad0 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
17ae0 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
17af0 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
17b00 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
17b10 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
17b20 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
17b30 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
17b40 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
17b50 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
17b60 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
17b70 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
17b80 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
17b90 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
17ba0 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
17bb0 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
17bc0 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
17bd0 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
17be0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
17bf0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
17c00 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
17c10 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
17c20 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
17c30 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
17c40 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
17c50 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
17c60 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
17c70 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
17c80 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
17c90 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
17ca0 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
17cb0 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
17cc0 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
17cd0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
17ce0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
17cf0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
17d00 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
17d10 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
17d20 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
17d30 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
17d40 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
17d50 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
17d60 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
17d70 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
17d80 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
17d90 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
17da0 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
17db0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
17dc0 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
17dd0 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
17de0 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
17df0 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
17e00 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
17e10 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
17e20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
17e30 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
17e40 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
17e50 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
17e60 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
17e70 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
17e80 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
17e90 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
17ea0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
17eb0 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
17ec0 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
17ed0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
17ee0 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
17ef0 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
17f00 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
17f10 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
17f20 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
17f30 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
17f40 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
17f50 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
17f60 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
17f70 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
17f80 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
17f90 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
17fa0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
17fb0 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
17fc0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
17fd0 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
17fe0 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
17ff0 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
18000 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
18010 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
18020 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
18030 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
18040 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
18050 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
18060 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
18070 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
18080 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
18090 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
180a0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
180b0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
180c0 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
180d0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
180e0 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
180f0 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  fg;.#ifndef SQLI
18100 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
18110 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
18120 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
18130 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
18140 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
18150 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
18160 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
18170 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
18180 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
18190 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
181a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
181b0 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
181c0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
181d0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
181e0 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
181f0 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
18200 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
18210 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
18220 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
18230 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
18240 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
18250 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
18260 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
18270 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
18280 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
18290 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
182a0 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
182b0 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
182c0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
182d0 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
182e0 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
182f0 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
18300 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
18310 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
18320 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
18330 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
18340 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
18350 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
18360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
18370 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
18380 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
18390 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
183a0 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
183b0 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
183c0 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
183d0 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
183e0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
183f0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
18400 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
18410 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
18420 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
18430 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
18440 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
18450 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
18460 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
18470 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
18480 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
18490 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
184a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
184b0 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
184c0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
184d0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
184e0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
184f0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
18500 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
18510 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
18520 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
18530 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
18540 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
18550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
18560 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
18570 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
18580 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
18590 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
185a0 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
185b0 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
185c0 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
185d0 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
185e0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
185f0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
18600 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
18610 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18620 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
18630 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
18640 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
18650 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
18660 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
18670 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
18680 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
18690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
186a0 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
186b0 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
186c0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
186d0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
186e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
186f0 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
18700 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
18710 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
18720 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
18730 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
18740 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
18750 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
18760 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
18770 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
18780 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
18790 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
187a0 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
187b0 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
187c0 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
187d0 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
187e0 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
187f0 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
18800 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
18810 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
18820 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
18830 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
18840 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
18850 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
18860 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
18870 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58  ERE_NO_AUTOINDEX
18880 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
18890 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69  isallow automati
188a0 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
188b0 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
188c0 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31  BY          0x01
188d0 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  00 /* pOrderBy i
188e0 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
188f0 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
18900 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
18910 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
18920 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
18930 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
18940 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
18950 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
18960 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a  NCT    0x0400 /*
18970 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
18980 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
18990 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
189a0 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
189b0 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70     0x0800 /* Sup
189c0 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
189d0 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
189e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f  define WHERE_REO
189f0 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78  PEN_IDX       0x
18a00 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75  1000 /* Try to u
18a10 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20  se OP_ReopenIdx 
18a20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18a30 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
18a40 57 20 30 78 32 30 30 30 20 2f 2a 20 4f 4e 45 50  W 0x2000 /* ONEP
18a50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
18a60 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
18a70 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
18a80 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
18a90 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
18aa0 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
18ab0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
18ac0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
18ad0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
18ae0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
18af0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
18b00 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
18b10 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
18b20 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
18b30 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
18b40 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
18b50 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
18b60 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
18b70 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
18b80 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
18b90 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
18ba0 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
18bb0 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
18bc0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
18bd0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
18be0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
18bf0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
18c00 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
18c10 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
18c20 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
18c30 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
18c40 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
18c50 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
18c60 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
18c70 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
18c80 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
18c90 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
18ca0 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
18cb0 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
18cc0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
18cd0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
18ce0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
18cf0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
18d00 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
18d10 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
18d20 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
18d30 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
18d40 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
18d50 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
18d60 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
18d70 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
18d80 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
18d90 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
18da0 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
18db0 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f  nner-most .** co
18dc0 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
18dd0 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
18de0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
18df0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
18e00 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
18e10 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
18e20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
18e30 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
18e40 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
18e50 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
18e60 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
18e70 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
18e80 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
18e90 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
18ea0 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
18eb0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
18ec0 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
18ed0 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
18ee0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
18ef0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
18f00 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63  nted. .**.** Eac
18f10 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
18f20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
18f30 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
18f40 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
18f50 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
18f60 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
18f70 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
18f80 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
18f90 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
18fa0 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
18fb0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
18fc0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
18fd0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
18fe0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
18ff0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
19000 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
19010 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
19020 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
19030 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
19040 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
19050 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
19060 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
19070 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
19080 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
19090 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
190a0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
190b0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
190c0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
190d0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
190e0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
190f0 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
19100 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
19110 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
19120 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
19130 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
19140 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
19150 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
19160 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
19170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19180 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
19190 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
191a0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
191b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
191c0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
191d0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
191e0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
191f0 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b  /.  u16 ncFlags;
19200 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
19210 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
19220 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
19230 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
19240 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
19250 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
19260 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
19270 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e  ..**.** Note:  N
19280 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74  C_MinMaxAgg must
19290 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
192a0 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61  alue as SF_MinMa
192b0 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49  xAgg and.** SQLI
192c0 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a  TE_FUNC_MINMAX..
192d0 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ** .*/.#define N
192e0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
192f0 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
19300 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
19310 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
19320 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
19330 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 4f      0x0002  /* O
19340 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
19350 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
19360 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
19370 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30  C_IsCheck   0x00
19380 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
19390 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
193a0 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
193b0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
193c0 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
193d0 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20  008  /* True if 
193e0 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
193f0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
19400 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
19410 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 31  _PartIdx   0x001
19420 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
19430 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
19440 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
19450 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
19460 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
19470 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
19480 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
19490 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
194a0 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
194b0 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
194c0 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
194d0 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
194e0 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   above */../*.**
194f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19500 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19510 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
19520 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
19530 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
19540 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
19550 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
19560 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
19570 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
19580 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
19590 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
195a0 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
195b0 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
195c0 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
195d0 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
195e0 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
195f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
19600 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
19610 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
19620 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
19630 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
19640 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
19650 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
19660 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
19670 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
19680 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
19690 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
196a0 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
196b0 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
196c0 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
196d0 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
196e0 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
196f0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
19700 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19710 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
19720 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
19730 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
19740 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
19750 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
19760 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
19770 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
19780 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
19790 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
197a0 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
197b0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
197c0 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
197d0 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
197e0 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
197f0 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
19800 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
19810 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
19820 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
19830 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
19840 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
19850 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
19860 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
19870 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
19880 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
19890 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
198a0 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
198b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
198c0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
198d0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
198e0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
198f0 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
19900 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
19910 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
19920 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
19930 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
19940 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
19950 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
19960 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19980 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
19990 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
199a0 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
199b0 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
199c0 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
199d0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
199e0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
199f0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
19a00 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
19a10 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
19a20 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
19a30 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
19a40 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
19a50 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
19a60 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
19a70 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
19a80 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
19a90 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
19aa0 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
19ab0 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
19ac0 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
19ad0 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
19ae0 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
19af0 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  u64 nSelectRow; 
19b00 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
19b10 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
19b20 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53  sult rows */.  S
19b30 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20  rcList *pSrc;   
19b40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f        /* The FRO
19b50 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  M clause */.  Ex
19b60 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
19b70 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
19b80 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  E clause */.  Ex
19b90 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
19ba0 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55  ;    /* The GROU
19bb0 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
19bc0 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20   Expr *pHaving; 
19bd0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48          /* The H
19be0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a  AVING clause */.
19bf0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
19c00 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  erBy;    /* The 
19c10 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
19c20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72  */.  Select *pPr
19c30 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ior;        /* P
19c40 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61  rior select in a
19c50 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
19c60 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
19c70 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20  Select *pNext;  
19c80 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73         /* Next s
19c90 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66  elect to the lef
19ca0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
19cb0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69  */.  Expr *pLimi
19cc0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  t;          /* L
19cd0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
19ce0 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
19cf0 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20  used. */.  Expr 
19d00 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20  *pOffset;       
19d10 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72    /* OFFSET expr
19d20 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
19d30 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
19d40 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
19d50 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
19d60 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
19d70 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
19d80 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a   Or NULL. */.};.
19d90 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
19da0 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
19db0 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
19dc0 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
19dd0 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
19de0 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66  t Flag"..*/.#def
19df0 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
19e00 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
19e10 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
19e20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
19e30 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
19e40 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32            0x0002
19e50 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
19e60 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
19e70 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
19e80 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30 30  lved        0x00
19e90 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
19ea0 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
19eb0 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
19ec0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
19ed0 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 43      0x0008  /* C
19ee0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
19ef0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
19f00 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
19f10 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 31 30  hemeral   0x0010
19f20 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
19f30 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
19f40 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
19f50 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
19f60 20 30 78 30 30 32 30 20 20 2f 2a 20 73 71 6c 69   0x0020  /* sqli
19f70 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
19f80 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
19f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
19fa0 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30  asTypeInfo     0
19fb0 78 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73  x0040  /* FROM s
19fc0 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
19fd0 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
19fe0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
19ff0 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78 30 30  ound        0x00
1a000 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  80  /* Part of a
1a010 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1a020 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
1a030 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78  lues          0x
1a040 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0100  /* Synthes
1a050 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
1a060 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1a070 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65  ne SF_MultiValue
1a080 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
1a090 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74   Single VALUES t
1a0a0 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  erm with multipl
1a0b0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1a0c0 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
1a0d0 20 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20       0x0400  /* 
1a0e0 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
1a0f0 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
1a100 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1a110 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1a120 20 20 30 78 30 38 30 30 20 20 2f 2a 20 4e 65 65    0x0800  /* Nee
1a130 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1a140 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1a150 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1a160 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
1a170 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67    0x1000  /* Agg
1a180 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
1a190 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
1a1a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1a1b0 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20 30  ecursive       0
1a1c0 78 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65  x2000  /* The re
1a1d0 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20  cursive part of 
1a1e0 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20  a recursive CTE 
1a1f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1a200 6e 76 65 72 74 65 64 20 20 20 20 20 20 20 30 78  nverted       0x
1a210 34 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76  4000  /* By conv
1a220 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1a230 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1a240 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
1a250 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
1a260 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
1a270 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
1a280 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
1a290 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
1a2a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1a2b0 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
1a2c0 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
1a2d0 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
1a2e0 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
1a2f0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
1a300 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
1a310 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
1a320 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20  ary index .**   
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1a350 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1a360 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1a370 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1a380 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1a390 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1a3a0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1a3b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a3c0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1a3d0 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1a3e0 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1a3f0 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1a400 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1a410 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1a420 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1a430 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1a440 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1a450 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1a460 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1a470 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1a480 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1a490 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1a4a0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1a4b0 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1a4e0 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1a4f0 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1a500 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1a510 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1a520 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1a530 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1a540 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1a550 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1a560 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1a570 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1a580 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1a590 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1a5a0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1a5b0 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1a5c0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1a5d0 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1a5e0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1a5f0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1a600 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1a610 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1a620 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1a630 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1a660 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1a670 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1a680 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a690 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1a6a0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1a6b0 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1a6c0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1a6e0 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1a6f0 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1a700 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1a710 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a720 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1a730 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1a740 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1a750 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1a780 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1a790 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1a7a0 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20  arm. .**        
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1a7c0 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1a7d0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1a7e0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1a810 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1a820 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1a830 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1a840 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1a850 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1a860 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1a870 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1a880 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a890 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1a8a0 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1a8b0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1a8c0 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a8e0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1a8f0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1a900 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1a930 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1a940 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1a950 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a970 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1a980 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1a990 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1a9a0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1a9b0 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1a9c0 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a9e0 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1a9f0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1aa00 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1aa10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1aa20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1aa30 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1aa40 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1aa50 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1aa60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1aa70 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1aa80 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1aa90 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1aaa0 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1aad0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1aae0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1aaf0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1ab00 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1ab10 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1ab20 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1ab30 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1ab40 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1ab50 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1ab60 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1ab70 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1ab80 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1ab90 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1aba0 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1abb0 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1abd0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1abe0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1abf0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1ac20 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1ac30 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1ac40 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ac50 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1ac60 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1ac70 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1ac90 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1aca0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1acb0 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1ace0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1acf0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1ad00 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1ad30 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1ad40 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1ad50 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1ad60 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ad70 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ad80 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ad90 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1adc0 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1add0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1ade0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1ae10 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1ae20 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1ae30 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1ae40 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1ae50 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1ae60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ae70 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1ae80 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1ae90 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1aea0 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1aed0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1aee0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1aef0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1af00 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1af10 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1af20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1af30 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1af40 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1af50 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1af60 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1af70 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1af80 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1af90 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1afa0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1afb0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1afc0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1afd0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1afe0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1aff0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1b000 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1b010 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1b020 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1b030 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1b040 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1b050 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1b060 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1b070 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1b080 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1b090 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1b0a0 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1b0b0 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1b0c0 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1b0d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1b0e0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1b0f0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1b100 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1b110 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1b120 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1b130 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1b140 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1b150 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1b160 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1b170 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1b180 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1b190 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1b1a0 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1b1b0 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1b1c0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1b1d0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1b1e0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1b1f0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1b200 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1b210 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1b220 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1b230 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1b240 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1b250 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1b260 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1b270 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1b280 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1b290 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1b2a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1b2b0 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1b2c0 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1b2d0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1b2e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1b2f0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1b300 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1b310 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1b320 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1b330 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1b340 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1b350 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1b360 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1b370 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1b380 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1b390 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1b3a0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1b3b0 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1b3c0 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1b3d0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1b3e0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1b3f0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
1b400 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
1b410 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
1b420 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
1b430 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
1b440 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1b450 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1b460 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1b470 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1b480 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1b490 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1b4a0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1b4b0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1b4c0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1b4d0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1b4e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b4f0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1b500 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ted */.  ExprLis
1b510 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1b520 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1b530 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1b540 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1b550 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1b560 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1b570 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1b580 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1b590 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1b5a0 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
1b5b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1b5c0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1b5d0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1b5e0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1b5f0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1b600 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1b610 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1b620 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1b630 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1b640 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1b650 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1b660 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1b670 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1b680 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1b690 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1b6a0 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
1b6b0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1b6c0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1b6d0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1b6e0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1b6f0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1b700 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1b710 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1b720 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1b730 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1b740 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1b750 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1b760 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1b770 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1b780 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1b790 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1b7a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1b7b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1b7c0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1b7d0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1b7e0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1b7f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1b800 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1b810 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1b820 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1b830 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1b840 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1b850 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1b860 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1b870 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1b880 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1b890 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1b8a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1b8b0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1b8c0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1b8d0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1b8e0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1b8f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1b900 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b910 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1b920 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
1b930 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1b940 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1b950 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1b960 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1b970 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1b980 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1b990 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1b9a0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1b9b0 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1b9c0 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1b9d0 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1b9e0 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1b9f0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1ba00 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1ba10 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1ba20 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1ba30 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1ba40 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1ba50 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1ba60 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1ba70 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1ba80 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1ba90 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1baa0 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1bab0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1bac0 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1bad0 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1bae0 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1baf0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1bb00 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1bb10 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1bb20 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1bb30 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1bb40 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1bb50 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1bb60 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1bb70 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1bb80 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1bb90 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1bba0 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1bbb0 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1bbc0 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1bbd0 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
1bbe0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1bbf0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1bc00 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1bc10 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1bc20 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1bc30 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1bc40 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1bc50 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1bc60 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1bc70 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1bc80 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1bc90 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1bca0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1bcb0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1bcc0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1bcd0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1bce0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1bcf0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1bd00 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1bd10 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1bd20 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1bd30 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1bd40 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1bd50 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1bd60 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1bd70 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1bd80 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1bd90 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1bda0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1bdb0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1bdc0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1bdd0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1bde0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1bdf0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1be00 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1be10 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1be20 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1be30 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1be40 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1be50 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1be60 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1be70 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1be80 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1be90 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1bea0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1beb0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1bec0 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1bed0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1bee0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1bef0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1bf00 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1bf10 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1bf20 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1bf30 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1bf40 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1bf50 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1bf60 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1bf70 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1bf80 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1bf90 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1bfa0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1bfb0 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1bfc0 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1bfd0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1bfe0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1bff0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1c000 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1c010 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1c020 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1c030 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1c040 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1c050 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1c060 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1c070 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1c080 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1c090 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1c0a0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1c0b0 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1c0c0 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1c0d0 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1c0e0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1c0f0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1c100 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1c110 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1c120 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1c130 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1c140 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1c150 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1c160 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1c170 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1c180 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1c190 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1c1a0 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1c1b0 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1c1c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1c1d0 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1c1e0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1c1f0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1c200 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1c210 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1c220 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1c230 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1c240 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1c250 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1c260 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1c270 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1c280 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  e .** feature is
1c290 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
1c2a0 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
1c2b0 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
1c2c0 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
1c2d0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1c2e0 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
1c2f0 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
1c300 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
1c310 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
1c320 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
1c330 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
1c340 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
1c350 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
1c360 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
1c370 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
1c380 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1c390 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
1c3a0 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
1c3b0 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
1c3c0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
1c3d0 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
1c3e0 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
1c3f0 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
1c400 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
1c410 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
1c420 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1c430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1c440 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
1c450 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
1c460 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
1c470 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
1c480 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
1c490 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
1c4a0 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
1c4b0 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
1c4c0 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
1c4d0 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
1c4e0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
1c4f0 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
1c500 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c510 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
1c520 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
1c530 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
1c540 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
1c550 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1c560 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
1c570 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
1c580 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
1c590 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
1c5a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1c5b0 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
1c5c0 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
1c5d0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
1c5e0 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
1c5f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1c600 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
1c610 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1c620 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
1c630 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
1c640 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
1c650 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1c660 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1c670 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
1c680 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
1c690 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
1c6a0 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69  constants */.  i
1c6b0 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1c6c0 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1c6d0 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1c6e0 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1c6f0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1c700 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1c710 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1c720 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1c730 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1c740 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1c750 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1c760 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1c770 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1c780 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1c790 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1c7a0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1c7b0 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1c7c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c7d0 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1c7e0 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1c7f0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1c800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c810 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1c820 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1c830 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1c840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c850 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1c860 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1c870 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1c880 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c890 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1c8a0 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1c8b0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1c8c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c8d0 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1c8e0 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1c8f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78  [] */.  int iFix
1c900 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  edOp;        /* 
1c910 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f  Never back out o
1c920 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d  pcodes iFixedOp-
1c930 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a  1 or earlier */.
1c940 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
1c950 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1c960 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
1c970 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
1c980 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
1c990 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20  t iSelfTab;     
1c9a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61     /* Table of a
1c9b0 6e 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78  n index whose ex
1c9c0 70 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  prs are being co
1c9d0 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  ded */.  int iCa
1c9e0 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
1c9f0 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
1ca00 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
1ca10 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
1ca20 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
1ca30 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
1ca40 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
1ca50 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
1ca60 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
1ca70 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
1ca80 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
1ca90 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
1caa0 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
1cab0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
1cac0 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
1cad0 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
1cae0 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
1caf0 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
1cb00 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1cb10 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
1cb20 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69  ber */.    i16 i
1cb30 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
1cb40 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
1cb50 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
1cb60 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
1cb70 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
1cb80 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
1cb90 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
1cba0 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
1cbb0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
1cbc0 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
1cbd0 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
1cbe0 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
1cbf0 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
1cc00 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
1cc10 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
1cc20 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
1cc30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1cc40 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
1cc50 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
1cc60 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
1cc70 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
1cc80 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
1cc90 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
1cca0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1ccb0 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
1ccc0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1ccd0 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1cce0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1ccf0 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1cd00 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1cd10 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1cd20 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1cd30 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1cd40 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1cd50 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1cd60 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1cd70 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1cd80 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1cd90 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1cda0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1cdb0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1cdc0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
1cdd0 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
1cde0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
1cdf0 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
1ce00 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
1ce10 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1ce20 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1ce30 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1ce40 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1ce50 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1ce60 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1ce70 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1ce80 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1ce90 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1cea0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1ceb0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1cec0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1ced0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1cee0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1cef0 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1cf00 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1cf10 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1cf20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1cf30 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1cf40 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1cf50 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1cf60 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1cf70 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1cf80 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1cf90 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1cfa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cfb0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1cfc0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1cfd0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cfe0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1cff0 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1d000 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1d010 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1d020 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1d030 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1d040 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1d050 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1d060 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1d070 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1d080 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1d090 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1d0a0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1d0b0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1d0c0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1d0d0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1d0e0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1d0f0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1d100 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1d110 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1d120 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1d130 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1d140 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1d150 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1d160 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1d170 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1d180 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1d190 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1d1a0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1d1b0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1d1c0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1d1d0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1d1e0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1d1f0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1d200 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1d210 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1d220 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1d230 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1d240 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1d250 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1d260 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1d270 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1d280 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1d290 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1d2a0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1d2b0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1d2c0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1d2d0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1d2e0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1d2f0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1d300 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1d310 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1d320 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1d330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d370 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
1d380 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
1d390 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
1d3a0 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
1d3b0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
1d3c0 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
1d3d0 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
1d3e0 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
1d3f0 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
1d400 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
1d410 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
1d420 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20  (Parse,nVar) so 
1d430 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d  the nVar field m
1d440 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74  ust be the first
1d450 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74   field.  ** in t
1d460 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
1d470 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
1d480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d4b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1d4c0 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d4e0 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
1d4f0 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
1d500 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
1d510 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20  */.  int nzVar; 
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d530 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69  * Number of avai
1d540 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61  lable slots in a
1d550 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  zVar[] */.  u8 i
1d560 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
1d570 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
1d580 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
1d590 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
1d5a0 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d5c0 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
1d5d0 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
1d5e0 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
1d5f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d600 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1d610 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  E.  u8 declareVt
1d620 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
1d630 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
1d640 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1d650 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
1d660 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
1d670 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d680 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
1d690 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
1d6a0 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73  dif.  int nAlias
1d6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d6c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69  /* Number of ali
1d6d0 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ased result set 
1d6e0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74  columns */.  int
1d6f0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1d700 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1d710 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1d720 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1d730 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1d740 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1d750 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1d760 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1d770 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1d780 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1d790 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1d7a0 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1d7b0 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1d7c0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1d7d0 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1d7e0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1d7f0 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
1d800 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1d810 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
1d820 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
1d830 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
1d840 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
1d850 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
1d860 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
1d870 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
1d880 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1d890 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
1d8a0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
1d8b0 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
1d8c0 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
1d8d0 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
1d8e0 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
1d8f0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
1d900 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
1d910 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
1d920 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
1d930 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
1d940 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
1d950 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
1d960 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
1d970 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1d980 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
1d990 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
1d9a0 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
1d9b0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1d9c0 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  meToken;        
1d9d0 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
1d9e0 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
1d9f0 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
1da00 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
1da10 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1da20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
1da30 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66  arsed */.#ifndef
1da40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1da50 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
1da60 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
1da70 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
1da80 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
1da90 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
1daa0 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
1dab0 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
1dac0 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
1dad0 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
1dae0 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
1daf0 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
1db00 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
1db10 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
1db20 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
1db30 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
1db40 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1db50 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
1db60 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
1db70 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
1db80 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1db90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1dba0 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
1dbb0 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
1dbc0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54  /.  With *pWithT
1dbd0 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  oFree;        /*
1dbe0 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20   Free this WITH 
1dbf0 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e  object at the en
1dc00 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a  d of the parse *
1dc10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  /.};../*.** Retu
1dc20 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
1dc30 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
1dc40 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1dc50 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
1dc60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1dc70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1dc80 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1dc90 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
1dca0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
1dcb0 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
1dcc0 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
1dcd0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1dce0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1dcf0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1dd00 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
1dd10 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
1dd20 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
1dd30 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
1dd40 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
1dd50 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
1dd60 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
1dd70 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
1dd80 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
1dd90 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
1dda0 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
1ddb0 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
1ddc0 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
1ddd0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1dde0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ddf0 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
1de00 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
1de10 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
1de20 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
1de30 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
1de40 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  es..*/.#define O
1de50 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1de60 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
1de70 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1de80 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
1de90 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
1dea0 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
1deb0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
1dec0 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
1ded0 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
1dee0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1def0 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
1df00 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1df10 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
1df20 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1df30 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
1df40 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
1df50 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
1df60 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
1df70 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
1df80 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
1df90 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
1dfa0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
1dfb0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
1dfc0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1dfd0 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
1dfe0 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
1dff0 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
1e000 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1e010 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
1e020 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
1e030 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1e040 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
1e050 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e060 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
1e070 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
1e080 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1e090 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
1e0a0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
1e0b0 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
1e0c0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
1e0d0 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
1e0e0 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
1e0f0 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
1e100 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
1e110 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
1e120 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
1e130 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1e140 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1e150 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
1e160 20 4f 50 5f 4f 70 65 6e 20 69 73 20 6f 70 65 6e   OP_Open is open
1e170 69 6e 67 20 66 6f 72 2d 64 65 6c 65 74 65 20 63  ing for-delete c
1e180 73 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  sr */.#define OP
1e190 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
1e1a0 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32     0x10    /* P2
1e1b0 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
1e1c0 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
1e1d0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
1e1e0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
1e1f0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1e200 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
1e210 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
1e220 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1e230 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1e240 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1e250 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1e260 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1e270 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1e280 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  r. . *. * Pointe
1e290 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1e2a0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1e2b0 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1e2c0 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1e2d0 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1e2e0 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1e2f0 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1e300 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1e310 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61  ts the . *    da
1e320 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
1e330 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
1e340 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
1e350 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
1e360 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
1e370 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1e380 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
1e390 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
1e3a0 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
1e3b0 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
1e3c0 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
1e3d0 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
1e3e0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1e3f0 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
1e400 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
1e410 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
1e420 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
1e430 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
1e440 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
1e450 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
1e460 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1e470 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
1e480 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1e490 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
1e4a0 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
1e4b0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
1e4c0 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
1e4d0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
1e4e0 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
1e4f0 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
1e500 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1e510 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
1e520 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
1e550 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
1e560 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
1e570 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
1e580 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
1e590 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1e5c0 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1e5d0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
1e5e0 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
1e5f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
1e600 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
1e610 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
1e620 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
1e630 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
1e640 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1e650 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
1e660 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
1e670 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
1e680 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
1e690 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1e6a0 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
1e6b0 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
1e6c0 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
1e6f0 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
1e700 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1e710 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
1e720 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1e730 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
1e740 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
1e750 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
1e760 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1e770 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
1e780 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1e790 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
1e7a0 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
1e7b0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
1e7c0 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
1e7d0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1e7e0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1e7f0 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
1e800 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1e810 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
1e820 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
1e830 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
1e840 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
1e850 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
1e860 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
1e870 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1e880 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  . .**.** If ther
1e890 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
1e8a0 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
1e8b0 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
1e8c0 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
1e8d0 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
1e8e0 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
1e8f0 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
1e900 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
1e910 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1e920 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
1e930 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
1e940 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
1e950 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
1e960 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
1e970 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
1e980 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
1e990 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
1e9a0 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
1e9b0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20  gger-program. . 
1e9c0 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1e9d0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1e9e0 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1e9f0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1ea00 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1ea10 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1ea20 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1ea30 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1ea40 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1ea50 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73  r of the . * ass
1ea60 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1ea70 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1ea80 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1ea90 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1eaa0 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1eab0 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1eac0 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1ead0 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f  m.. * . * The "o
1eae0 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
1eaf0 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
1eb00 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
1eb10 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
1eb20 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
1eb30 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
1eb40 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
1eb50 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
1eb60 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1eb70 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66  the . * value of
1eb80 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
1eb90 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
1eba0 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
1ebb0 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
1ebc0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1ebd0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
1ebe0 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
1ebf0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1ec00 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
1ec10 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1ec20 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1ec30 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1ec40 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
1ec50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ec60 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
1ec70 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
1ec80 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
1ec90 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1eca0 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
1ecb0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
1ecc0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1ecd0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
1ece0 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
1ecf0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1ed00 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1ed10 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
1ed20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
1ed30 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
1ed40 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
1ed50 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1ed60 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
1ed70 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
1ed80 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20  ... . *         
1ed90 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
1eda0 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
1edb0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
1edc0 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
1edd0 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
1ede0 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
1edf0 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
1ee00 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
1ee10 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
1ee20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1ee30 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1ee40 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1ee50 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1ee60 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1ee70 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1ee80 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1ee90 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1eea0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1eeb0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1eec0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1eed0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1eee0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
1eef0 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
1ef00 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1ef10 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
1ef20 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1ef30 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1ef40 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1ef50 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1ef60 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
1ef70 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
1ef80 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
1ef90 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
1efa0 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
1efb0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
1efc0 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
1efd0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
1efe0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
1eff0 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
1f000 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
1f010 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
1f020 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1f030 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
1f040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1f050 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1f060 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1f070 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
1f080 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
1f090 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
1f0a0 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
1f0b0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1f0c0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
1f0d0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
1f0e0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
1f0f0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
1f100 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
1f110 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1f120 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1f130 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
1f140 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
1f150 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
1f160 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
1f170 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
1f180 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
1f190 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1f1a0 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1f1b0 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
1f1c0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
1f1d0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1f1e0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
1f1f0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1f200 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
1f210 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1f220 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1f230 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1f240 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1f250 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1f260 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1f270 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1f280 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1f290 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1f2a0 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1f2b0 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1f2c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1f2d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1f2e0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1f2f0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1f300 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1f310 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1f320 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1f330 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1f340 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1f350 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1f360 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1f370 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1f380 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1f390 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1f3a0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1f3b0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1f3c0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1f3d0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1f3e0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1f3f0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1f400 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1f410 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
1f420 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
1f430 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
1f440 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
1f450 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
1f460 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1f470 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1f480 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1f490 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1f4a0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1f4b0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1f4c0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1f4d0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1f4e0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1f4f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1f500 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1f510 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1f520 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1f530 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1f540 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1f550 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1f560 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1f570 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1f580 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1f590 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1f5a0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1f5b0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1f5c0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1f5d0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1f5e0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1f5f0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1f600 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1f610 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1f620 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1f630 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1f640 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1f650 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1f660 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1f670 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1f680 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1f690 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1f6a0 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1f6b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1f6c0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1f6d0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1f6e0 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1f6f0 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1f700 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1f710 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1f720 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1f730 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1f740 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
1f750 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
1f760 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
1f770 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1f780 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1f790 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1f7a0 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1f7b0 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1f7c0 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1f7d0 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1f7e0 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1f7f0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1f800 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1f810 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1f820 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1f830 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1f840 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1f850 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1f860 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1f870 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1f880 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1f890 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1f8a0 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1f8b0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1f8c0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1f8d0 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1f8e0 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1f8f0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1f900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1f910 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1f920 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1f930 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1f940 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1f950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1f960 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1f970 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1f980 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1f990 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1f9a0 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1f9b0 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1f9c0 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1f9d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1f9e0 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1f9f0 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1fa00 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1fa10 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1fa20 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1fa30 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1fa40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1fa50 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1fa60 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1fa70 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1faa0 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1fab0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1fac0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1fad0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1fae0 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1faf0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1fb00 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1fb30 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1fb40 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1fb50 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fb70 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1fb80 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1fb90 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1fba0 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1fbc0 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1fbd0 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
1fbe0 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1fc00 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
1fc10 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
1fc20 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1fc30 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1fc40 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1fc50 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1fc60 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1fc70 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fc90 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1fca0 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1fcb0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1fcc0 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1fcd0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1fce0 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1fcf0 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1fd00 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1fd10 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1fd20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1fd30 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1fd40 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1fd50 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1fd60 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1fd70 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1fd80 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1fd90 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1fdc0 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1fdd0 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1fe00 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1fe10 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1fe20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1fe30 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1fe40 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1fe50 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1fe60 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1fe70 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1fe80 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1fe90 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1fea0 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1feb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1fec0 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1fed0 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1fee0 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1ff00 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1ff10 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1ff20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ff30 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1ff40 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1ff50 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1ff60 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1ff70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ff80 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1ff90 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1ffa0 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ffc0 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1ffd0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1ffe0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1fff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
20000 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
20010 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
20020 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
20050 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
20060 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
20070 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
20080 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
20090 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
200a0 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
200b0 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
200c0 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
200d0 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
200e0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
200f0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32  enabled */.  u32
20100 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20   szPma;         
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20120 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72  * Maximum Sorter
20130 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f   PMA size */.  /
20140 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
20150 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
20160 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
20170 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
20180 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
20190 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
201a0 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
201b0 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
201e0 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
201f0 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
20200 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
20210 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
20220 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
20230 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
20240 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
20250 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
20260 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
20270 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20280 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
20290 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
202a0 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
202b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
202c0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
202d0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
202e0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
202f0 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20310 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
20320 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
20330 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
20340 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
20350 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20360 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
20370 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71  nitMutex */.  sq
20380 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
20390 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
203a0 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
203b0 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
203c0 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ize() */.  void 
203d0 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
203e0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
203f0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
20400 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
20410 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
20440 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
20450 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20460 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76  NABLE_SQLLOG.  v
20470 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f  oid(*xSqllog)(vo
20480 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
20490 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
204a0 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41    void *pSqllogA
204b0 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  rg;.#endif.#ifde
204c0 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f  f SQLITE_VDBE_CO
204d0 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20  VERAGE.  /* The 
204e0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61  following callba
204f0 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29  ck (if not NULL)
20500 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65   is invoked on e
20510 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68  very VDBE branch
20520 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  .  ** operation.
20530 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61    Set the callba
20540 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ck using SQLITE_
20550 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f  TESTCTRL_VDBE_CO
20560 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76  VERAGE..  */.  v
20570 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63  oid (*xVdbeBranc
20580 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72  h)(void*,int iSr
20590 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
205a0 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
205b0 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
205c0 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
20600 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
20610 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20620 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
20630 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
20640 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
20650 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
20660 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
20670 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
20680 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
20690 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
206a0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
206b0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
206c0 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ls */.};../*.** 
206d0 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
206e0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
206f0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
20700 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
20710 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
20720 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
20730 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
20740 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
20750 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
20760 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
20770 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
20780 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
20790 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
207a0 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
207b0 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
207c0 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
207d0 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
207e0 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
207f0 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
20800 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
20810 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
20820 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
20830 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
20840 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
20850 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
20860 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
20870 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
20880 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
20890 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
208a0 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
208b0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
208c0 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
208d0 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
208e0 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
208f0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
20900 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
20910 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
20920 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
20930 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
20940 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
20950 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
20960 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
20970 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
20980 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
20990 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
209a0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
209b0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
209c0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
209d0 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
209e0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
209f0 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
20a00 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
20a10 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
20a20 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
20a30 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
20a40 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
20a50 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
20a60 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
20a70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
20aa0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
20ab0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20ae0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
20af0 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
20b20 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
20b30 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
20b40 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
20b70 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
20b80 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
20b90 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bb0 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
20bc0 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
20bd0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e         /* A coun
20c00 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ter */.    int i
20c10 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
20c40 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
20c50 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
20c60 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
20c70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
20c80 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
20c90 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
20ca0 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
20cc0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
20cd0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
20ce0 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
20cf0 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
20d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
20d10 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
20d20 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 7d 20 75  rHint() */.  } u
20d30 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
20d40 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
20d50 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
20d60 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
20d70 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
20d80 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
20d90 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
20da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20db0 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
20dc0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
20dd0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
20de0 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
20df0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
20e00 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
20e10 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
20e20 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20e30 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
20e40 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a  lker*, Expr*);..
20e50 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
20e60 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
20e70 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
20e80 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
20e90 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
20ea0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
20eb0 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
20ec0 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
20ed0 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
20ee0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
20ef0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
20f00 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
20f10 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
20f20 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
20f30 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
20f40 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
20f50 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
20f60 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
20f70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
20f80 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
20f90 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
20fa0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
20fb0 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
20fc0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
20fd0 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
20fe0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
20ff0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
21000 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21020 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21030 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
21040 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
21050 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21070 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
21080 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
21090 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
210a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
210b0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
210c0 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
210d0 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
210e0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
21110 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
21120 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21140 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
21150 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
21160 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
21170 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21190 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
211a0 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
211b0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
211c0 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
211d0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
211e0 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
211f0 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
21200 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
21210 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
21220 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
21230 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
21240 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
21250 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
21260 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
21270 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
21280 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
21290 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
212a0 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
212b0 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
212c0 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
212d0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
212e0 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
212f0 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
21300 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
21310 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
21320 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
21330 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
21340 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
21350 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
21360 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
21370 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  G */../*.** Assu
21380 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
21390 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
213a0 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
213b0 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
213c0 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
213d0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
213e0 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
213f0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
21400 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
21410 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
21420 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
21430 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
21440 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
21450 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
21480 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
21490 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
214a0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214e0 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
214f0 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
21500 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
21510 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
21520 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
21530 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
21540 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
21550 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
21560 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
21570 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
21580 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
21590 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
215a0 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
215b0 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
215c0 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
215d0 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
215e0 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
215f0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
21600 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
21610 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
21620 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
21630 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
21640 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
21650 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
21660 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
21670 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
21680 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
21690 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
216a0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
216b0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
216c0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
216d0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
216e0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
216f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21700 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
21710 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
21720 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
21730 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
21740 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
21750 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
21760 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
21770 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
21780 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
21790 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
217a0 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
217b0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
217c0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
217d0 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
217e0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
217f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
21800 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
21810 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
21820 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
21830 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
21840 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
21850 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
21860 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  3 1.#endif../*.*
21870 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
21880 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
21890 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
218a0 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
218b0 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
218c0 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
218d0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
218e0 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
218f0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
21900 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
21910 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
21920 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
21930 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
21940 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
21950 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
21960 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
21970 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
21980 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
21990 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
219a0 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
219b0 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
219c0 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
219d0 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
219e0 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
219f0 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
21a00 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
21a10 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
21a20 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
21a30 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
21a40 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
21a50 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
21a60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21a70 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
21a80 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
21a90 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
21aa0 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
21ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21ac0 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
21ad0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21ae0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21af0 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
21b00 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
21b10 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
21b20 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21b30 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
21b40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21b50 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
21b60 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21b70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21b80 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
21b90 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
21ba0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
21bb0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21bc0 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
21bd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21be0 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
21bf0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21c00 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21c10 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
21c20 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
21c30 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
21c40 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
21c50 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
21c60 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21c70 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
21c80 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
21c90 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
21ca0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
21cb0 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
21cc0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
21cd0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
21ce0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
21cf0 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
21d00 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
21d10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21d20 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
21d30 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
21d40 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
21d50 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
21d60 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
21d70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
21d80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21d90 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
21da0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
21db0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
21dc0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
21dd0 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
21de0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21df0 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
21e00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
21e10 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
21e20 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  S.int sqlite3IsI
21e30 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69  dChar(u8);.#endi
21e40 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
21e50 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
21e60 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
21e70 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
21e80 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
21e90 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
21ea0 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
21eb0 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
21ec0 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
21ed0 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
21ee0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
21ef0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
21f00 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
21f10 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
21f20 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
21f30 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
21f40 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
21f50 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
21f60 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
21f70 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
21f80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
21f90 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
21fa0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
21fb0 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
21fc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
21fd0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
21fe0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
21ff0 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
22000 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
22010 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
22020 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
22030 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
22040 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
22050 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
22060 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
22070 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
22080 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
22090 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
220a0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
220b0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
220c0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
220d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
220e0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
220f0 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
22100 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
22110 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
22120 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
22130 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
22140 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
22150 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22160 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
22170 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
22180 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
22190 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
221a0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
221b0 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
221c0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
221d0 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
221e0 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
221f0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
22200 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
22210 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
22220 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
22230 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
22240 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
22250 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
22260 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
22270 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
22280 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
22290 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
222a0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
222b0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
222c0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
222d0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
222e0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
222f0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
22300 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
22310 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
22320 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
22330 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
22340 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
22350 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
22360 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
22370 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
22380 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
22390 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
223a0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
223b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
223c0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
223d0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
223e0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
223f0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
22400 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
22410 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22420 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
22430 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
22440 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
22450 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
22460 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
22470 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
22480 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
22490 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
224a0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
224b0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
224c0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
224d0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
224e0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
224f0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
22500 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
22510 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
22520 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
22530 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
22540 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
22550 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
22560 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
22570 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
22580 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
22590 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
225a0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
225b0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
225c0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
225d0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
225e0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
225f0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
22600 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
22610 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
22620 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
22630 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
22640 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
22650 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
22660 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
22670 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
22680 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
22690 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
226a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
226b0 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
226c0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
226d0 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
226e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
226f0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
22700 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
22710 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
22720 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
22730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
22740 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
22750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
22760 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
22770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22780 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
22790 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
227a0 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
227b0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
227c0 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
227d0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
227e0 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
227f0 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
22800 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
22810 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
22820 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22830 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
22840 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
22850 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
22860 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
22870 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
22880 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
22890 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
228a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
228b0 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
228c0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
228d0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
228e0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
228f0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
22900 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
22910 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
22920 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
22930 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
22940 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
22950 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
22960 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
22970 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22990 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
229a0 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
229b0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
229c0 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
229d0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
229e0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
229f0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
22a00 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
22a10 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
22a20 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
22a30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
22a40 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
22a50 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
22a60 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
22a70 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
22a80 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
22a90 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
22aa0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
22ab0 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
22ac0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22ad0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
22ae0 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
22af0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22b00 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
22b10 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22b20 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
22b30 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
22b40 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
22b50 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
22b60 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
22b70 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
22b80 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22b90 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
22ba0 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
22bb0 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
22bc0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22bd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
22be0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
22bf0 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
22c00 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
22c10 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
22c20 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
22c30 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
22c40 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
22c50 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
22c60 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
22c70 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
22c80 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
22c90 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
22ca0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
22cb0 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
22cc0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
22cd0 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  With*, u8);.#end
22ce0 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
22cf0 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
22d00 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
22d10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22d20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
22d30 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
22d40 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
22d50 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
22d60 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
22d70 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
22d80 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
22d90 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
22da0 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
22db0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
22dc0 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
22dd0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
22de0 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
22df0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
22e00 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
22e10 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
22e20 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
22e30 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
22e40 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
22e50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
22e60 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
22e70 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
22e80 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
22e90 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
22ea0 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
22eb0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
22ec0 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
22ed0 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
22ee0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
22ef0 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
22f00 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
22f10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22f20 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
22f30 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
22f40 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
22f50 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
22f60 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
22f70 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
22f80 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
22f90 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
22fa0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
22fb0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
22fc0 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
22fd0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
22fe0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
22ff0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23000 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
23010 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
23020 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23030 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
23040 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
23050 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
23060 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
23070 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
23080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23090 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64  prListSetSortOrd
230a0 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  er(ExprList*,int
230b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
230c0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
230d0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
230e0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
230f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
23100 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
23110 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
23120 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
23130 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
23140 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
23150 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
23160 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
23170 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
23180 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
23190 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
231a0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
231b0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
231c0 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
231d0 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
231e0 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
231f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
23200 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
23210 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
23220 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
23230 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
23240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23250 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
23260 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
23270 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
23280 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
23290 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
232a0 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
232b0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
232c0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
232d0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
232e0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
232f0 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
23300 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
23310 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
23320 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
23330 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
23340 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
23350 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20  olumn**);.Table 
23360 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
23370 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
23380 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
23390 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
233a0 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
233b0 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
233c0 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
233d0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
233e0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
233f0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
23400 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
23410 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
23420 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
23430 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
23440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
23450 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
23460 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
23470 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
23480 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
23490 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
234a0 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
234b0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
234c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
234d0 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
234e0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
234f0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
23500 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
23510 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
23520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23530 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
23540 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
23550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
23560 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
23570 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
23580 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
23590 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
235a0 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
235b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
235c0 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
235d0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
235e0 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
23610 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
23620 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
23630 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
23640 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23650 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
23660 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
23670 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
23680 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
23690 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
236a0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
236b0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
236c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
236d0 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
236e0 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
236f0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
23700 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
23710 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
23720 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
23730 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
23740 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
23750 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
23760 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
23770 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
23780 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
23790 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
237a0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
237b0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
237c0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
237d0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
237e0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
237f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23800 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69  T_BUILTIN_TEST.i
23810 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
23820 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
23830 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
23840 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
23850 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
23860 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
23870 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
23880 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
23890 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
238a0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
238b0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
238c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
238d0 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
238e0 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
238f0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
23900 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
23910 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
23920 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
23930 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
23940 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
23950 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
23960 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
23970 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23980 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
23990 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
239a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
239b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
239c0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
239d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
239e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
239f0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
23a00 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
23a10 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
23a20 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
23a30 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
23a40 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
23a50 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
23a60 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
23a70 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
23a80 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
23a90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
23aa0 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
23ab0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
23ac0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23ad0 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
23ae0 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
23af0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23b00 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
23b10 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
23b20 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
23b30 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
23b40 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
23b50 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
23b60 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
23b70 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
23b80 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
23b90 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
23ba0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23bb0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
23bc0 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
23bd0 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
23be0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23bf0 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
23c00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
23c10 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
23c20 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
23c30 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
23c40 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
23c50 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
23c60 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
23c70 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
23c80 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
23c90 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
23ca0 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
23cb0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
23cc0 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
23cd0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
23ce0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
23cf0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
23d00 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
23d10 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
23d20 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
23d30 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
23d40 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
23d50 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23d60 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
23da0 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
23db0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23dc0 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
23dd0 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
23de0 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
23df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23e00 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
23e10 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23e20 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
23e30 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
23e40 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
23e50 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
23e60 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
23e70 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
23e80 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
23e90 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
23ea0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
23eb0 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
23ec0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
23ed0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
23ee0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
23ef0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
23f00 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
23f10 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
23f20 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
23f30 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
23f40 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
23f50 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
23f60 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
23f70 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
23f80 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
23f90 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
23fa0 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fc0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
23fd0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23fe0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
23ff0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
24000 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24010 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
24020 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
24030 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
24040 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
24050 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
24060 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
24070 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
240a0 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
240b0 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
240c0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
240d0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
240e0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
240f0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
24100 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
24110 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24120 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
24130 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
24140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
24150 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
24160 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
24170 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
24180 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24190 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
241a0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
241b0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
241c0 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
241d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
241e0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
241f0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
24200 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
24210 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
24220 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
24230 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
24240 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
24250 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24260 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
24270 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
24280 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
24290 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
242a0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
242b0 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
242c0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
242d0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
242e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
242f0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
24300 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
24310 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
24320 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
24330 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
24340 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
24350 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
24360 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
24370 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
24380 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
24390 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
243a0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
243b0 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
243c0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
243d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
243e0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
243f0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
24400 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
24410 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
24420 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
24430 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
24440 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
24450 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
24460 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
24470 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
24480 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
24490 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
244a0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
244b0 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
244c0 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
244d0 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
244e0 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
244f0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
24500 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
24510 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
24520 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
24530 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
24540 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
24550 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
24560 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
24570 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24580 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
24590 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
245a0 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a  lumnToReg(Parse*
245b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
245c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
245d0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
245e0 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
245f0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
24600 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
24610 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
24620 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
24630 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
24640 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24650 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
24660 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
24670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24680 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
24690 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
246a0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
246b0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
246c0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
246d0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
246e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
246f0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
24700 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24710 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
24720 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
24730 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
24740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24750 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
24760 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
24770 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
24780 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
24790 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
247a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
247b0 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
247c0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
247d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
247e0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
247f0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
24800 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
24810 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
24820 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
24830 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24840 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
24850 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
24860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24870 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
24880 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
24890 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
248a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
248b0 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
248c0 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
248d0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
248e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
248f0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
24900 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
24910 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
24920 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
24930 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
24940 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
24950 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
24960 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20  erByCol */.void 
24970 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
24980 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
24990 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
249a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
249b0 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
249c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
249d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
249e0 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c  FalseDup(Parse*,
249f0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
24a00 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
24a10 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
24a20 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
24a30 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
24a40 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
24a50 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
24a60 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
24a70 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24a80 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
24a90 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
24aa0 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
24ab0 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
24ac0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
24ad0 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
24ae0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
24af0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24b00 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
24b10 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24b20 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
24b30 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
24b40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
24b50 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
24b60 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
24b70 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
24b80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
24b90 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
24ba0 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
24bb0 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
24bc0 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
24bd0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
24be0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
24bf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
24c00 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
24c10 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
24c20 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
24c30 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
24c40 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
24c50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
24c60 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
24c70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
24c80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24c90 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
24ca0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
24cb0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
24cc0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
24cd0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
24ce0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
24cf0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24d00 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
24d10 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
24d20 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
24d30 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
24d40 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
24d50 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
24d60 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
24d70 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
24d80 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
24d90 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
24da0 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
24db0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
24dc0 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
24dd0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
24de0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
24df0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
24e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24e10 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
24e20 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
24e30 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
24e40 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
24e50 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
24e60 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
24e70 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
24e80 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
24e90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
24ea0 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
24eb0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24ec0 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
24ed0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
24ee0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24ef0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
24f00 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
24f10 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
24f20 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
24f30 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
24f40 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
24f50 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
24f60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
24f70 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
24f80 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
24f90 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
24fa0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
24fb0 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
24fc0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
24fd0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
24fe0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
24ff0 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
25000 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
25010 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
25020 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
25030 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
25040 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
25050 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
25060 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
25070 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
25080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25090 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
250a0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
250b0 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
250c0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
250d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
250e0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
250f0 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
25100 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
25110 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
25120 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
25130 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25140 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
25150 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
25160 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
25170 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
25180 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
25190 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
251a0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
251b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
251c0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
251d0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
251e0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
251f0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
25200 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
25210 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
25220 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
25230 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
25240 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
25270 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
25280 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
25290 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
252a0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
252b0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
252c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
252d0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
252e0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
252f0 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
25300 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
25310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
25320 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
25330 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
25340 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25350 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
25360 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
25370 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
25380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
25390 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
253a0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
253b0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
253c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
253d0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
253e0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
253f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
25400 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
25410 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
25420 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
25430 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
25440 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
25450 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
25460 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
25470 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
25480 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
25490 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
254a0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
254b0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
254c0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
254d0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
254e0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
254f0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
25500 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
25510 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
25520 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
25530 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
25540 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
25550 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
25560 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25570 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
25580 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
25590 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
255a0 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
255b0 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
255c0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
255d0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
255e0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
255f0 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
25600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
25610 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
25620 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
25630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
25640 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
25650 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
25660 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
25670 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
25680 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
25690 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
256a0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
256b0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
256c0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
256d0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
256e0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
256f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
25700 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
25710 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
25720 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25730 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
25740 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
25750 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
25760 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
25770 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
25780 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25790 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
257a0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
257b0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
257c0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
257d0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
257e0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
257f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25800 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
25810 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25820 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
25830 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
25840 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
25850 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
25860 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
25870 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
25880 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
25890 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
258a0 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
258b0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
258c0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
258d0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
258e0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
258f0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
25900 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
25910 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
25920 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
25930 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
25940 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
25950 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
25960 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
25970 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
259a0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
259b0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
259c0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
259d0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
259e0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
259f0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
25a00 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
25a10 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
25a20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
25a30 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
25a40 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
25a50 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
25a60 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
25a70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
25a80 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
25a90 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
25aa0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
25ab0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
25ac0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
25ad0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
25ae0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
25af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
25b20 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
25b30 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
25b40 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
25b50 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
25b60 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
25b70 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
25b80 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
25b90 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
25ba0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
25bb0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
25bc0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
25bd0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
25be0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
25bf0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
25c00 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
25c10 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
25c20 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
25c30 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
25c40 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
25c50 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
25c60 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
25c70 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
25c80 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
25c90 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
25ca0 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
25cb0 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66  vel : (p)).# def
25cc0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
25cd0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
25ce0 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c  Toplevel==0).#el
25cf0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25d00 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
25d10 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
25d20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
25d30 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
25d40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25d50 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
25d60 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
25d70 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
25d80 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
25d90 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
25da0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
25db0 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
25dc0 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
25dd0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
25de0 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
25df0 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
25e00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
25e10 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
25e20 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
25e30 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
25e40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25e50 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20  Toplevel(p) 1.# 
25e60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
25e70 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
25e80 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
25e90 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
25ea0 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
25eb0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25ec0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25ed0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
25ee0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
25ef0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
25f00 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
25f10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25f20 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
25f30 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
25f40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25f50 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
25f60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
25f70 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
25f80 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
25f90 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
25fa0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
25fb0 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
25fc0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25fd0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
25fe0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25ff0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
26000 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
26010 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
26020 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26030 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
26040 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
26050 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
26060 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
26070 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
26080 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
26090 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
260a0 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
260b0 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
260c0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
260d0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
260e0 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
260f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
26100 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
26110 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
26120 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
26130 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
26140 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
26150 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
26160 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
26170 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
26180 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
26190 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
261a0 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
261b0 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
261c0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
261d0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
261e0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
261f0 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
26200 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
26210 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
26220 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
26230 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26240 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
26250 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
26260 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
26270 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
26280 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
26290 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
262a0 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
262b0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
262c0 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
262d0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
262e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
262f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
26300 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
26310 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26320 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
26330 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
26340 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
26350 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
26360 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
26370 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
26380 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
26390 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
263a0 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
263b0 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
263c0 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
263d0 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
263e0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
263f0 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
26400 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
26410 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26420 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
26430 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
26440 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
26450 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
26460 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
26470 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
26480 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
26490 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
264a0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
264b0 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
264c0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
264d0 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
264e0 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
264f0 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
26500 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
26510 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
26520 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
26530 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
26540 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
26550 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
26560 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
26570 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
26580 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
26590 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
265a0 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
265b0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
265c0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
265d0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
265e0 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
265f0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
26600 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
26610 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
26620 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
26630 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
26640 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
26650 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
26660 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
26670 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
26680 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
26690 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
266a0 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
266b0 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
266c0 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
266d0 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
266e0 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
266f0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
26700 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
26710 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
26720 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
26730 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
26740 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
26750 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
26760 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
26770 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
26780 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
26790 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
267a0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
267b0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
267c0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
267d0 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  tr(sqlite3*, Ind
267e0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
267f0 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
26800 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
26810 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
26820 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
26830 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
26840 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
26850 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
26860 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
26870 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
26880 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
26890 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
268a0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
268b0 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
268c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
268d0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
268e0 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
268f0 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
26900 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
26910 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
26920 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
26930 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
26940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26950 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
26960 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
26970 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
26980 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
26990 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
269a0 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
269b0 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
269c0 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
269d0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
269e0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
269f0 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
26a00 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
26a10 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
26a20 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
26a30 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
26a40 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
26a50 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
26a60 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
26a70 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
26a80 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
26a90 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
26aa0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
26ab0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
26ac0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
26ad0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
26ae0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
26af0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
26b00 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
26b10 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
26b20 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
26b30 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
26b40 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
26b50 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
26b60 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
26b70 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
26b80 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
26b90 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
26ba0 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
26bb0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
26bc0 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
26bd0 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
26be0 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
26bf0 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
26c00 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
26c10 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
26c20 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
26c30 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
26c40 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
26c50 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
26c60 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
26c70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26c80 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
26c90 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
26ca0 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
26cb0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26cc0 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
26cd0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
26ce0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
26cf0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
26d00 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
26d10 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
26d20 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
26d30 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
26d40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26d50 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
26d60 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
26d70 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
26d80 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
26d90 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
26da0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
26db0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
26dc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
26dd0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
26de0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
26df0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
26e00 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
26e10 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
26e20 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e40 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
26e50 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
26e60 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
26e70 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
26e80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
26e90 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
26ea0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
26eb0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
26ec0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
26ed0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
26ee0 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
26ef0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
26f00 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
26f10 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
26f20 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
26f30 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
26f40 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
26f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
26f60 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
26f70 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
26f80 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
26f90 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
26fa0 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
26fb0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
26fc0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
26fd0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
26fe0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
26ff0 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
27000 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
27010 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
27020 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
27030 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
27040 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
27050 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
27060 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
27070 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
27080 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
27090 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51  onfig;.extern SQ
270a0 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66  LITE_WSD FuncDef
270b0 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62  Hash sqlite3Glob
270c0 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  alFunctions;.#if
270d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
270e0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
270f0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
27100 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
27110 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
27120 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
27130 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
27140 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27150 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
27160 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
27170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
27180 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
27190 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
271a0 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
271b0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
271c0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
271d0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
271e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
271f0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
27200 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
27210 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
27220 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
27230 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27240 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
27250 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
27260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
27270 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
27280 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
27290 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
272a0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
272b0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
272c0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
272d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
272e0 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
272f0 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
27300 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
27310 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
27320 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
27330 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
27340 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
27350 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
27360 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
27370 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
27380 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
27390 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
273a0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
273b0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
273c0 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
273d0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
273e0 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
273f0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
27400 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
27410 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
27420 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
27430 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
27440 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
27450 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
27460 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
27470 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
27480 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
27490 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
274a0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
274b0 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
274c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
274d0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
274e0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
274f0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
27500 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
27510 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
27520 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
27530 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
27540 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
27550 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
27560 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
27570 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
27580 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
27590 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
275a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
275b0 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
275c0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
275d0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
275e0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
275f0 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
27600 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
27610 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
27620 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
27630 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
27640 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
27650 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
27660 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
27670 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
27680 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
27690 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
276a0 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
276b0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
276c0 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
276d0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
276e0 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
276f0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
27700 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
27710 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
27720 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
27730 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
27740 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72  e3MinimumFileFor
27750 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  mat(Parse*, int,
27760 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27770 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
27780 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
27790 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
277a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
277b0 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
277c0 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
277d0 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
277e0 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
277f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
27800 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
27810 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
27820 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
27830 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
27840 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
27850 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
27860 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
27870 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
27880 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
27890 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
278a0 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
278b0 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
278c0 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
278d0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
278e0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
278f0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
27900 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
27910 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
27920 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
27930 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
27940 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
27950 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
27960 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
27970 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
27980 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
27990 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
279a0 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
279b0 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
279c0 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
279d0 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
279e0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
279f0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
27a00 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
27a10 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
27a20 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74  StrAccum*, sqlit
27a30 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c  e3*, char*, int,
27a40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27a50 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
27a60 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  d(StrAccum*,cons
27a70 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f  t char*,int);.vo
27a80 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
27a90 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41  umAppendAll(StrA
27aa0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
27ab0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27ac0 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63  AppendChar(StrAc
27ad0 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a  cum*,int,char);.
27ae0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
27af0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
27b00 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
27b10 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
27b20 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
27b30 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
27b40 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
27b50 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
27b60 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
27b70 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
27b80 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
27b90 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
27ba0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
27bb0 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
27bc0 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
27bd0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
27be0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
27bf0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
27c00 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65  st u8 *);..#ifde
27c10 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27c20 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
27c30 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
27c40 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
27c50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27c60 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
27c70 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55  (Parse*,Index*,U
27c80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
27c90 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74  Expr*,u8,int,int
27ca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
27cb0 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
27cc0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
27cd0 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
27ce0 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
27cf0 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
27d00 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
27d10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
27d20 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
27d30 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
27d40 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
27d50 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65  te3_value**);.#e
27d60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
27d70 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
27d80 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
27d90 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20   parser.*/.void 
27da0 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
27db0 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34  loc(void*(*)(u64
27dc0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
27dd0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
27de0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
27df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27e00 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
27e10 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
27e20 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
27e30 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
27e40 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
27e50 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
27e60 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
27e70 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
27e80 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
27e90 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
27ea0 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
27eb0 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
27ec0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
27ed0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
27ee0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27ef0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
27f00 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
27f10 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27f20 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
27f30 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
27f40 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
27f50 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
27f60 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
27f70 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27f80 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
27f90 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
27fa0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27fb0 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
27fc0 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
27fd0 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
27fe0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
27ff0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
28000 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
28010 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
28020 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
28030 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
28040 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
28050 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
28060 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
28070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
28080 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
28090 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
280a0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
280b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
280c0 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20  VtabLock(X) .#  
280d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
280e0 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
280f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28100 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
28110 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
28120 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
28130 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
28140 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
28150 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
28160 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
28170 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
28180 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
28190 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
281a0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
281b0 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
281c0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
281d0 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
281e0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
281f0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
28200 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
28210 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
28220 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
28230 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
28240 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
28250 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
28260 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
28270 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
28280 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28290 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
282a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
282b0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
282c0 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
282d0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
282e0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
282f0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
28300 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
28310 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
28320 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
28330 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
28340 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
28350 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
28360 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
28370 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
28380 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
28390 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
283a0 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
283b0 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
283c0 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
283d0 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
283e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
283f0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
28400 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
28410 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
28420 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
28430 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
28440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28450 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
28460 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
28470 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
28480 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28490 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
284a0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
284b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
284c0 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
284d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
284e0 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
284f0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
28500 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
28510 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
28520 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
28530 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
28540 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
28550 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
28560 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
28570 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
28580 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
28590 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
285a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
285b0 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
285c0 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
285d0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
285e0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
285f0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
28600 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
28610 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28620 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
28630 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
28640 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
28650 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
28660 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
28670 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
28680 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
28690 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
286a0 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
286b0 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
286c0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
286d0 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
286e0 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
286f0 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
28700 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
28710 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
28720 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
28730 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
28740 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
28750 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
28760 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
28770 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
28780 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
28790 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
287a0 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
287b0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
287c0 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
287d0 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
287e0 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
287f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
28800 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
28810 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
28820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
28830 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
28840 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
28850 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28860 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
28870 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
28880 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
28890 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
288a0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
288b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
288c0 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
288d0 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
288e0 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
288f0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
28900 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
28910 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
28920 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
28930 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
28940 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
28950 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
28960 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
28970 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
28980 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
28990 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
289a0 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
289b0 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
289c0 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
289d0 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
289e0 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
289f0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
28a00 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
28a10 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
28a20 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
28a30 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
28a40 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
28a50 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
28a60 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
28a70 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
28a80 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
28a90 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
28aa0 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
28ab0 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
28ac0 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
28ad0 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
28ae0 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
28af0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
28b00 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65   .** provided (e
28b10 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
28b20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
28b30 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
28b40 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
28b50 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28b60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
28b70 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
28b80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
28b90 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
28ba0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
28bb0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28bc0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
28bd0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
28be0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
28bf0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
28c00 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
28c10 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
28c20 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
28c30 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
28c40 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
28c50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
28c60 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
28c70 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
28c80 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
28c90 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
28ca0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
28cb0 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
28cc0 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
28cd0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
28ce0 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
28cf0 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
28d00 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28d10 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
28d20 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
28d30 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
28d40 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
28d50 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
28d60 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
28d70 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
28d80 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
28d90 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65  a,b,c,d)    0.#e
28da0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
28db0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
28dc0 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
28dd0 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
28de0 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
28df0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
28e00 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
28e10 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
28e20 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
28e30 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
28e40 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
28e50 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
28e60 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
28e70 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
28e80 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
28e90 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
28ea0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
28eb0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
28ec0 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
28ed0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
28ee0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
28ef0 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
28f00 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
28f10 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
28f20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
28f30 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
28f40 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
28f50 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
28f60 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
28f70 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
28f80 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
28f90 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
28fa0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
28fb0 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
28fc0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
28fd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
28fe0 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
28ff0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
29000 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
29010 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29020 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
29030 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
29040 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
29050 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
29060 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
29070 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
29080 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
29090 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
290a0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
290b0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
290c0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
290d0 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
290e0 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
290f0 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
29100 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
29110 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
29120 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
29130 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
29140 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
29150 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
29160 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
29170 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
29180 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
29190 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
291a0 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
291b0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
291c0 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
291d0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
291e0 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
291f0 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
29200 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
29210 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
29220 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
29230 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
29240 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
29250 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
29260 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
29270 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
29280 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
29290 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
292a0 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
292b0 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
292c0 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
292d0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
292e0 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
292f0 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
29300 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
29310 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
29320 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
29330 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
29340 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
29350 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
29360 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
29370 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
29380 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
29390 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
293a0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
293b0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
293c0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
293d0 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
293e0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
293f0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
29400 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
29410 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
29420 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
29430 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69  te3_file *);.  i
29440 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
29450 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f  lExists(sqlite3_
29460 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a  file *p);.#else.
29470 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29480 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
29490 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
294a0 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20  File).  #define 
294b0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
294c0 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66  ists(p) 1.#endif
294d0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
294e0 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
294f0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
29500 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
29510 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
29520 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
29530 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
29540 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
29550 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
29560 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
29570 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
29580 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
29590 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
295a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
295b0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
295c0 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
295d0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
295e0 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
295f0 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
29600 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
29610 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
29620 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29630 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
29640 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
29650 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
29660 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
29670 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
29680 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
29690 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
296a0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
296b0 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
296c0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
296d0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
296e0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
296f0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
29700 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
29710 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
29720 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29730 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
29740 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
29750 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
29760 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
29770 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
29780 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
29790 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
297a0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
297b0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
297c0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
297d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
297e0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
297f0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
29800 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
29810 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
29820 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
29830 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
29840 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
29850 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
29860 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
29870 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
29880 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
29890 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
298a0 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
298b0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
298c0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
298d0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
298e0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
298f0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
29900 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
29910 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
29920 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
29930 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
29940 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
29950 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
29960 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
29970 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
29980 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
29990 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
299a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
299b0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
299c0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
299d0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
299e0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
299f0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
29a00 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
29a10 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
29a20 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
29a30 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
29a40 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
29a50 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
29a60 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
29a70 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
29a80 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
29a90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29aa0 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
29ab0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
29ac0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
29ad0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
29ae0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
29af0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
29b00 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
29b10 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
29b20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
29b30 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
29b40 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
29b50 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
29b60 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
29b70 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
29b80 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
29b90 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
29ba0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
29bb0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
29bc0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
29bd0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
29be0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
29bf0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
29c00 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
29c10 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
29c20 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
29c30 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
29c40 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
29c50 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
29c60 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
29c70 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
29c80 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
29c90 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
29ca0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
29cb0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
29cc0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
29cd0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
29ce0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
29cf0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
29d00 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
29d10 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
29d20 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
29d30 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
29d40 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
29d50 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
29d60 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
29d70 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
29d80 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
29d90 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
29da0 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
29db0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
29dc0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
29dd0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
29de0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
29df0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
29e00 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
29e10 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
29e20 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
29e30 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
29e40 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
29e50 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
29e60 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
29e70 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
29e80 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
29e90 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
29ea0 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
29eb0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
29ec0 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74   .**.** All of t
29ed0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
29ee0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
29ef0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
29f00 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
29f10 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
29f20 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
29f30 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
29f40 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
29f50 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
29f60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
29f70 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
29f80 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
29f90 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
29fa0 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
29fb0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
29fc0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
29fd0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
29fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
29ff0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2a000 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2a010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a020 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2a030 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2a040 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2a050 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2a060 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2a070 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2a080 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2a090 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2a0a0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2a0b0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2a0c0 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2a0d0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2a0e0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2a0f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2a100 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
2a110 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
2a120 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2a130 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
2a140 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
2a150 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
2a160 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  ocations */../*.
2a170 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
2a180 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
2a190 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
2a1a0 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
2a1b0 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
2a1c0 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
2a1d0 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
2a1e0 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
2a1f0 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
2a200 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
2a210 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
2a220 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2a230 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2a240 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2a250 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2a260 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2a270 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2a280 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
2a290 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
2a2a0 48 5f 20 2a 2f 0a                                H_ */.