/ Hex Artifact Content
Login

Artifact 1741691824491c330dda1e49f370920bfd3aa230:


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: 65 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c  else.#      incl
1bb0: 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68  ude <cmnintrin.h
1bc0: 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20  >.#    endif.#  
1bd0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1be0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
1bf0: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
1c00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1c10: 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a  as 0, 1, or 2..*
1c20: 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65  * 0 means mutexe
1c30: 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c  s are permanentl
1c40: 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68  y disable and th
1c50: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76  e library is nev
1c60: 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65  er.** threadsafe
1c70: 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  1 means the l
1c80: 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c  ibrary is serial
1c90: 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68  ized which is th
1ca0: 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76  e highest.** lev
1cb0: 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65  el of threadsafe
1cc0: 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  ty.  2 means the
1cd0: 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74   library is mult
1ce0: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1cf0: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1d00: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1d10: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1d20: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
1d30: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
1d40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1d50: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
1d60: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
1d70: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
1d80: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1d90: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1da0: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1db0: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1dc0: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1dd0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1de0: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1df0: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1e00: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1e10: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1e20: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
1e30: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
1e40: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
1e50: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
1e60: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
1e70: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e80: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1e90: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1ea0: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1eb0: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1ec0: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1ed0: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1ee0: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1ef0: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1f00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f10: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1f20: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
1f30: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1f40: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
1f50: 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45  ../*.** EVIDENCE
1f60: 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30  -OF: R-25715-370
1f70: 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  72 Memory alloca
1f80: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
1f90: 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a  are enabled by.*
1fa0: 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73  * default unless
1fb0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
1fc0: 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f  led with SQLITE_
1fd0: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1fe0: 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20  S=0 in.** which 
1ff0: 63 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  case memory allo
2000: 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  cation statistic
2010: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62  s are disabled b
2020: 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  y default..*/.#i
2030: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2040: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
2050: 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TUS).# define SQ
2060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2070: 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a  STATUS 1.#endif.
2080: 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f  ./*.** Exactly o
2090: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
20a0: 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20  ing macros must 
20b0: 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72  be defined in or
20c0: 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66  der to.** specif
20d0: 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61  y which memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73  llocation subsys
20f0: 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a  tem to use..**.*
2100: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53  *     SQLITE_SYS
2110: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  TEM_MALLOC      
2120: 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61      // Use norma
2130: 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  l system malloc(
2140: 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  ).**     SQLITE_
2150: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20  WIN32_MALLOC    
2160: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69         // Use Wi
2170: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
2180: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
2190: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20  E_ZERO_MALLOC   
21a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
21b0: 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72  a stub allocator
21c0: 20 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69   that always fai
21d0: 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ls.**     SQLITE
21e0: 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20  _MEMDEBUG       
21f0: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67          // Debug
2200: 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20  ging version of 
2210: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2220: 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73  **.** On Windows
2230: 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  , if the SQLITE_
2240: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c  WIN32_MALLOC_VAL
2250: 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64  IDATE macro is d
2260: 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a  efined and the.*
2270: 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f  * assert() macro
2280: 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63   is enabled, eac
2290: 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  h call into the 
22a0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
22b0: 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77  p subsystem.** w
22c0: 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61  ill cause HeapVa
22d0: 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c  lidate to be cal
22e0: 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61  led.  If heap va
22f0: 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  lidation should 
2300: 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65  fail, an.** asse
2310: 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72  rtion will be tr
2320: 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  iggered..**.** I
2330: 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62  f none of the ab
2340: 6f 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c  ove are defined,
2350: 20 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45   then set SQLITE
2360: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61  _SYSTEM_MALLOC a
2370: 73 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  s.** the default
2380: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2390: 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d  (SQLITE_SYSTEM_M
23a0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
23b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
23c0: 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  2_MALLOC) \.  + 
23d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a  defined(SQLITE_Z
23e0: 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  ERO_MALLOC) \.  
23f0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2400: 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65  _MEMDEBUG)>1.# e
2410: 72 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72  rror "Two or mor
2420: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2430: 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ng compile-time 
2440: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
2450: 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69  tions\. are defi
2460: 6e 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20  ned but at most 
2470: 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c  one is allowed:\
2480: 0a 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  . SQLITE_SYSTEM_
2490: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57  MALLOC, SQLITE_W
24a0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  IN32_MALLOC, SQL
24b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20  ITE_MEMDEBUG,\. 
24c0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
24d0: 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  OC".#endif.#if d
24e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
24f0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
2500: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2510: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
2520: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2540: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2550: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2560: 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ==0.# define SQL
2570: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2580: 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  C 1.#endif../*.*
2590: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c  * If SQLITE_MALL
25a0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73  OC_SOFT_LIMIT is
25b0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
25c0: 74 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a  try to keep the.
25d0: 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f  ** sizes of memo
25e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62  ry allocations b
25f0: 65 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20  elow this value 
2600: 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a  where possible..
2610: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2620: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2630: 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69  FT_LIMIT).# defi
2640: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ne SQLITE_MALLOC
2650: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34  _SOFT_LIMIT 1024
2660: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57  .#endif../*.** W
2670: 65 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65  e need to define
2680: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61   _XOPEN_SOURCE a
2690: 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64  s follows in ord
26a0: 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20  er to enable.** 
26b0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
26c0: 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73  s on most Unix s
26d0: 79 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f  ystems and fchmo
26e0: 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a  d() on OpenBSD..
26f0: 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f  ** But _XOPEN_SO
2700: 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73  URCE define caus
2710: 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20  es problems for 
2720: 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69  Mac OS X, so omi
2730: 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20  t.** it..*/.#if 
2740: 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f  !defined(_XOPEN_
2750: 53 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69  SOURCE) && !defi
2760: 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20  ned(__DARWIN__) 
2770: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50  && !defined(__AP
2780: 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65  PLE__).#  define
2790: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36   _XOPEN_SOURCE 6
27a0: 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  00.#endif../*.**
27b0: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
27c0: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
27d0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
27e0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
27f0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
2800: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
2810: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2820: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
2830: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
2840: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
2850: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
2860: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
2870: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
2880: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
2890: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
28a0: 20 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64   and faster by d
28b0: 69 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20  isabling the.** 
28c0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
28d0: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e  nts in the code.
28e0: 20 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65    So we want the
28f0: 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a   default action.
2900: 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45  ** to be for NDE
2910: 42 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e  BUG to be set an
2920: 64 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75  d NDEBUG to be u
2930: 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66  ndefined only if
2940: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a   SQLITE_DEBUG.**
2950: 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e   is set.  Thus N
2960: 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e  DEBUG becomes an
2970: 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74   opt-in rather t
2980: 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a  han an opt-out.*
2990: 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69  * feature..*/.#i
29a0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
29b0: 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  G) && !defined(S
29c0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20  QLITE_DEBUG) .# 
29d0: 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a  define NDEBUG 1.
29e0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
29f0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 64 65  ed(NDEBUG) && de
2a00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2a10: 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42  UG).# undef NDEB
2a20: 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  UG.#endif../*.**
2a30: 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45   Enable SQLITE_E
2a40: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
2a50: 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45  MMENTS if SQLITE
2a60: 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e 65 64  _DEBUG is turned
2a70: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   on..*/.#if !def
2a80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a90: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2aa0: 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65 64 28  NTS) && defined(
2ab0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20  SQLITE_DEBUG).# 
2ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
2ad0: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
2ae0: 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a  MENTS 1.#endif..
2af0: 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61  /*.** The testca
2b00: 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  se() macro is us
2b10: 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76  ed to aid in cov
2b20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20  erage testing.  
2b30: 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63  When .** doing c
2b40: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c  overage testing,
2b50: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
2b60: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
2b70: 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73  nt to.** testcas
2b80: 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c  e() must be eval
2b90: 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20  uated both true 
2ba0: 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64  and false in ord
2bb0: 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c  er to.** get ful
2bc0: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
2bd0: 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65  e.  The testcase
2be0: 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65  () macro is inse
2bf0: 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20  rted.** to help 
2c00: 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20  ensure adequate 
2c10: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e  test coverage in
2c20: 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69   places where si
2c30: 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  mple.** conditio
2c40: 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72  n/decision cover
2c50: 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74  age is inadequat
2c60: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
2c70: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2c80: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
2c90: 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79  ke sure boundary
2ca0: 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74   values are test
2cb0: 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d  ed.  For.** bitm
2cc0: 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63  ask tests, testc
2cd0: 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65  ase() can be use
2ce0: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
2cf0: 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69  ach bit.** is si
2d00: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73  gnificant and us
2d10: 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
2d20: 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61  .  On switch sta
2d30: 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65  tements.** where
2d40: 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20   multiple cases 
2d50: 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62  go to the same b
2d60: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65  lock of code, te
2d70: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2d80: 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20  insure that all 
2d90: 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61  cases are evalua
2da0: 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65  ted..**.*/.#ifde
2db0: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
2dc0: 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  E_TEST.  void sq
2dd0: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e  lite3Coverage(in
2de0: 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73  t);.# define tes
2df0: 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20  tcase(X)  if( X 
2e00: 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  ){ sqlite3Covera
2e10: 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a  ge(__LINE__); }.
2e20: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74  #else.# define t
2e30: 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69  estcase(X).#endi
2e40: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53  f../*.** The TES
2e50: 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75  TONLY macro is u
2e60: 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76  sed to enclose v
2e70: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
2e80: 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72  ions or.** other
2e90: 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68   bits of code th
2ea0: 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f  at are needed to
2eb0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67   support the arg
2ec0: 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e  uments.** within
2ed0: 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20   testcase() and 
2ee0: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e  assert() macros.
2ef0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2f00: 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  (NDEBUG) || defi
2f10: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2f20: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2f30: 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20  ne TESTONLY(X)  
2f40: 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  X.#else.# define
2f50: 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e   TESTONLY(X).#en
2f60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74  dif../*.** Somet
2f70: 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73  imes we need a s
2f80: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63  mall amount of c
2f90: 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61  ode such as a va
2fa0: 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a  riable initializ
2fb0: 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75  ation.** to setu
2fc0: 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73  p for a later as
2fd0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2fe0: 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e  .  We do not wan
2ff0: 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a  t this code to.*
3000: 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73  * appear when as
3010: 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
3020: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
3030: 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72  ng macro is ther
3040: 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  efore.** used to
3050: 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65   contain that se
3060: 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22  tup code.  The "
3070: 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61  VVA" acronym sta
3080: 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69  nds for.** "Veri
3090: 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
30a0: 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64  tion, and Accred
30b0: 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74  itation".  In ot
30c0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a  her words, the.*
30d0: 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56  * code within VV
30e0: 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e  A_ONLY() will on
30f0: 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65  ly run during ve
3100: 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65  rification proce
3110: 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  sses..*/.#ifndef
3120: 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65   NDEBUG.# define
3130: 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a   VVA_ONLY(X)  X.
3140: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
3150: 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  VA_ONLY(X).#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57  f../*.** The ALW
3170: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61  AYS and NEVER ma
3180: 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f  cros surround bo
3190: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
31a0: 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20  s which .** are 
31b0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
31c0: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
31d0: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
31e0: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
31f0: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
3200: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
3210: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
3220: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
3230: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
3240: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
3250: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
3260: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
3270: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
3280: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
3290: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
32a0: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
32b0: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
32c0: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
32d0: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
32e0: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
32f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
3300: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
3310: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
3320: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3330: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3340: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
3350: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
3360: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
3370: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3380: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
3390: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
33a0: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
33b0: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
33c0: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
33d0: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
33e0: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
33f0: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
3400: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
3410: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3420: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3430: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3440: 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64  (X)      (1).# d
3450: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
3460: 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21       (0).#elif !
3470: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a  defined(NDEBUG).
3480: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
3490: 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28  X)      ((X)?1:(
34a0: 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20  assert(0),0)).# 
34b0: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
34c0: 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65        ((X)?(asse
34d0: 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73  rt(0),1):0).#els
34e0: 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  e.# define ALWAY
34f0: 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20  S(X)      (X).# 
3500: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3510: 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66        (X).#endif
3520: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74  ../*.** Declarat
3530: 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72  ions used for tr
3540: 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74  acing the operat
3550: 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72  ing system inter
3560: 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  faces..*/.#if de
3570: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52  fined(SQLITE_FOR
3580: 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  CE_OS_TRACE) || 
3590: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
35a0: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
35b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
35c0: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
35d0: 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20  S_WIN).  extern 
35e0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61  int sqlite3OSTra
35f0: 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  ce;.# define OST
3600: 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20  RACE(X)         
3610: 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72   if( sqlite3OSTr
3620: 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62  ace ) sqlite3Deb
3630: 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66  ugPrintf X.# def
3640: 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ine SQLITE_HAVE_
3650: 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23  OS_TRACE.#else.#
3660: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3670: 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  X).# undef  SQLI
3680: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
3690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
36a0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72  s the sqlite3Err
36b0: 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  Name() function 
36c0: 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75  needed in the bu
36d0: 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ild?  Currently,
36e0: 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64  .** it is needed
36f0: 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63   by "mutex_w32.c
3700: 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e  " (when debuggin
3710: 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28  g), "os_win.c" (
3720: 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20  when.** OSTRACE 
3730: 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64  is enabled), and
3740: 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73   by several "tes
3750: 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69  t*.c" files (whi
3760: 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c  ch are.** compil
3770: 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ed using SQLITE_
3780: 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65  TEST)..*/.#if de
3790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
37a0: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
37b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
37c0: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
37d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
37e0: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
37f0: 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53  _WIN).# define S
3800: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3810: 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65  AME.#else.# unde
3820: 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  f  SQLITE_NEED_E
3830: 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a  RR_NAME.#endif..
3840: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
3850: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
3860: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
3870: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3880: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
3890: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
38a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
38b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
38c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
38d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
38e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
38f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
3900: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
3910: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
3920: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
3930: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
3940: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
3950: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
3960: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
3970: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
3980: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
3990: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
39a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
39b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
39c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
39d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
39e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
39f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
3a00: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
3a10: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
3a20: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
3a30: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
3a40: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
3a50: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
3a60: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
3a70: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
3a80: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
3a90: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
3aa0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
3ab0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
3ac0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
3ad0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
3ae0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
3af0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
3b00: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
3b10: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
3b20: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
3b30: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
3b40: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  ef.h>../*.** If 
3b50: 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20  compiling for a 
3b60: 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c  processor that l
3b70: 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f  acks floating po
3b80: 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20  int support,.** 
3b90: 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67  substitute integ
3ba0: 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er for floating-
3bb0: 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20  point.*/.#ifdef 
3bc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3bd0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
3be0: 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74  ine double sqlit
3bf0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3c00: 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e   float sqlite_in
3c10: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  t64.# define LON
3c20: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c  GDOUBLE_TYPE sql
3c30: 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64  ite_int64.# ifnd
3c40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
3c50: 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  L.#   define SQL
3c60: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73  ITE_BIG_DBL (((s
3c70: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c  qlite3_int64)1)<
3c80: 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64  <50).# endif.# d
3c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
3ca0: 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
3cb0: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3cc0: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a  TE_OMIT_TRACE 1.
3cd0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
3ce0: 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49  IXED_ENDIAN_64BI
3cf0: 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20  T_FLOAT.# undef 
3d00: 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41  SQLITE_HAVE_ISNA
3d10: 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  N.#endif.#ifndef
3d20: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3d30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d40: 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23  BIG_DBL (1e99).#
3d50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49  endif../*.** OMI
3d60: 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20  T_TEMPDB is set 
3d70: 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f  to 1 if SQLITE_O
3d80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65  MIT_TEMPDB is de
3d90: 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61  fined, or 0.** a
3da0: 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67  fterward. Having
3db0: 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f   this macro allo
3dc0: 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74  ws us to cause t
3dd0: 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a  he C compiler .*
3de0: 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75  * to omit code u
3df0: 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c  sed by TEMP tabl
3e00: 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79  es without messy
3e10: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
3e20: 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  nts..*/.#ifdef S
3e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
3e40: 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  B.#define OMIT_T
3e50: 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64  EMPDB 1.#else.#d
3e60: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3e70: 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B 0.#endif../*.*
3e80: 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d  * The "file form
3e90: 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e  at" number is an
3ea0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
3eb0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
3ec0: 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42  never.** the VDB
3ed0: 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72  E-level file for
3ee0: 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68  mat changes.  Th
3ef0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3f00: 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a  os define the.**
3f10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c   the default fil
3f20: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77  e format for new
3f30: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
3f40: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
3f50: 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74  format.** that t
3f60: 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72  he library can r
3f70: 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ead..*/.#define 
3f80: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f  SQLITE_MAX_FILE_
3f90: 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66  FORMAT 4.#ifndef
3fa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3fb0: 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65  FILE_FORMAT.# de
3fc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3fd0: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  ULT_FILE_FORMAT 
3fe0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
3ff0: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
4000: 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72  r triggers are r
4010: 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61  ecursive by defa
4020: 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62  ult.  This can b
4030: 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20  e.** changed at 
4040: 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61  run-time using a
4050: 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e   pragma..*/.#ifn
4060: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4070: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4080: 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53  GGERS.# define 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: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
40c0: 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75   Provide a defau
40d0: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c  lt value for SQL
40e0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
40f0: 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74  n case it is not
4100: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e   specified.** on
4110: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
4120: 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
4130: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23  ITE_TEMP_STORE.#
4140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4150: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65  EMP_STORE 1.# de
4160: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
4170: 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20  _STORE_xc 1  /* 
4180: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
4190: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
41a0: 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75  /*.** If no valu
41b0: 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69  e has been provi
41c0: 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d  ded for SQLITE_M
41d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
41e0: 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49  S, or if.** SQLI
41f0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  TE_TEMP_STORE is
4200: 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72   set to 3 (never
4210: 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66   use temporary f
4220: 69 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a  iles), set it .*
4230: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
4240: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
4250: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
4260: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
4270: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
4280: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4290: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
42a0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
42b0: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
42c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
42e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
42f0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4300: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
4310: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4320: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
4330: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4340: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4350: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
4360: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if 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 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
4390: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
43a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
43b0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
43c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
43d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
43e0: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
43f0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4400: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4410: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
4420: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
4430: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
4440: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
4450: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
4460: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
4470: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
4480: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
4490: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
44a0: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
44b0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
44c0: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
44d0: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
44e0: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
44f0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
4500: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
4510: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
4520: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
4530: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4540: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
4550: 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65  _INITSZ.# define
4560: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4570: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 31 30  PCACHE_INITSZ 10
4580: 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  0.#endif.../*.**
4590: 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65   GCC does not de
45a0: 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f  fine the offseto
45b0: 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27  f() macro so we'
45c0: 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74  ll have to do it
45d0: 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a  .** ourselves..*
45e0: 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74  /.#ifndef offset
45f0: 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65  of.#define offse
4600: 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49  tof(STRUCTURE,FI
4610: 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61  ELD) ((int)((cha
4620: 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a  r*)&((STRUCTURE*
4630: 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e  )0)->FIELD)).#en
4640: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
4650: 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e  s to compute min
4660: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d  imum and maximum
4670: 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e   of two numbers.
4680: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28  .*/.#define MIN(
4690: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
46a0: 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d  ):(B)).#define M
46b0: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
46c0: 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a  ?(A):(B))../*.**
46d0: 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74   Swap two object
46e0: 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a  s of type TYPE..
46f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28  */.#define SWAP(
4700: 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20  TYPE,A,B) {TYPE 
4710: 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a  t=A; A=B; B=t;}.
4720: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
4730: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
4740: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
4750: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
4760: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
4770: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
4780: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
4790: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
47a0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
47b0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
47c0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
47d0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
47e0: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
47f0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
4800: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
4810: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
4820: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
4830: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
4840: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
4850: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
4860: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
4870: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
4880: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
4890: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
48a0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
48b0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
48c0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
48d0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
48e0: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
48f0: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4900: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4910: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4920: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4930: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4940: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4950: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4960: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
4970: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
4980: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4990: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
49a0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
49b0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
49c0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
49d0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
49e0: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
49f0: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4a00: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4a10: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4a20: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4a30: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4a40: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4a50: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4a60: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
4a70: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
4a80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4a90: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
4aa0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
4ab0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
4ac0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4ae0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4af0: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4b00: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4b10: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4b20: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4b30: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4b40: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4b50: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4b60: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
4b70: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
4b80: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
4b90: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
4ba0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4bb0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
4bc0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4bd0: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4be0: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4bf0: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4c00: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4c10: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4c20: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4c30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4c40: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4c50: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4c60: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
4c70: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
4c80: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4c90: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
4ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
4cb0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4cc0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4cd0: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4cf0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d00: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4d10: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4d30: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4d40: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4d50: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
4d70: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d80: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
4d90: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
4da0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
4db0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
4dc0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4dd0: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4de0: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4df0: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4e00: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4e10: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4e20: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4e30: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4e40: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4e50: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4e60: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
4e70: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
4e80: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
4e90: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
4ea0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
4eb0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
4ec0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4ed0: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4ee0: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4ef0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4f00: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4f10: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4f20: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4f30: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4f40: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4f50: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4f60: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
4f70: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
4f80: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
4f90: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
4fa0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
4fb0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
4fc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4fd0: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4fe0: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4ff0: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
5000: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
5010: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
5020: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
5030: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
5040: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
5050: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
5060: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
5070: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
5080: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
5090: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
50a0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
50b0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
50c0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
50d0: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
50e0: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
50f0: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
5100: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
5110: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
5120: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
5130: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
5140: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
5150: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
5160: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
5170: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
5180: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
5190: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
51a0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
51b0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
51c0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
51d0: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
51e0: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
51f0: 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  tities are suppo
5200: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
5210: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
5220: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
5230: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
5240: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
5250: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
5260: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
5270: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
5280: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
5290: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
52b0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
52c0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
52d0: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
52e0: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
52f0: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
5300: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
5310: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
5320: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
5330: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
5340: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
5350: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
5360: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
5370: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
5380: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
5390: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
53a0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
53b0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
53c0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
53d0: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
53e0: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
53f0: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
5400: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
5410: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
5420: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
5430: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
5440: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
5450: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
5460: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
5470: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
5480: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
5490: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
54a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
54b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
54c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
54d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
54e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
54f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
5500: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
5510: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
5520: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
5530: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
5540: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
5550: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
5560: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
5570: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
5580: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
5590: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
55a0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
55b0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
55c0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
55d0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
55e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
55f0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
5600: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
5610: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
5620: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
5630: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
5640: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
5650: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
5660: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
5670: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
5680: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
5690: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
56a0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
56b0: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
56c0: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
56d0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
56e0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
56f0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
5700: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
5710: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5720: 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65  ER=1 is set, the
5730: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
5740: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
5750: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
5760: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5770: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
5780: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
5790: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
57a0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
57b0: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
57c0: 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20   (defined(i386) 
57d0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
57e0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
57f0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5800: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5810: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
5820: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
5830: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
5840: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
5850: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
5860: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
5870: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
5880: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
5890: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
58a0: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
58b0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
58c0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
58d0: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
58e0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
58f0: 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69  R    1234.# defi
5900: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5910: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
5920: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
5930: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
5940: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5950: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
5960: 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28  6LE.#endif.#if (
5970: 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20  defined(sparc)  
5980: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70    || defined(__p
5990: 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26  pc__))  \.    &&
59a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
59b0: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
59c0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
59d0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
59e0: 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53   4321.# define S
59f0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5a00: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
5a10: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5a20: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
5a30: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5a40: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
5a50: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
5a60: 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f  ned(SQLITE_BYTEO
5a70: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
5a80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5a90: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
5aa0: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5ab0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5ad0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5ae0: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5af0: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5b10: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5b20: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5b30: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
5b40: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5b50: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
5b60: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
5b70: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
5b80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
5b90: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
5ba0: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
5bb0: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
5bc0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
5bd0: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
5be0: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
5bf0: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
5c00: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
5c10: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
5c20: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
5c30: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
5c40: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
5c50: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
5c60: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
5c70: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
5c80: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
5c90: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
5ca0: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
5cb0: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
5cc0: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
5cd0: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
5ce0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
5cf0: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
5d00: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
5d10: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
5d20: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5d30: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
5d40: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
5d50: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
5d60: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
5d70: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
5d80: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
5d90: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
5da0: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
5db0: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
5dc0: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
5dd0: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
5de0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5df0: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
5e00: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
5e10: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
5e20: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
5e30: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
5e40: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
5e50: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
5e60: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
5e70: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
5e80: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
5e90: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
5ea0: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
5eb0: 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  on might return 
5ec0: 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  us 4-byte aligne
5ed0: 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20  d.** pointers.  
5ee0: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e  In that case, on
5ef0: 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65  ly verify 4-byte
5f00: 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23   alignment..*/.#
5f10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42  ifdef SQLITE_4_B
5f20: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5f30: 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  OC.# define EIGH
5f40: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5f50: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
5f60: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
5f70: 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  3)==0).#else.# d
5f80: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5f90: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5fa0: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5fb0: 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29  (char*)0)&7)==0)
5fc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5fd0: 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70  isable MMAP on p
5fe0: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69  latforms where i
5ff0: 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f  t is known to no
6000: 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65  t work.*/.#if de
6010: 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f  fined(__OpenBSD_
6020: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
6030: 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65  QNXNTO__).# unde
6040: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
6050: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
6060: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6070: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SIZE 0.#endif../
6080: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78  *.** Default max
6090: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d  imum size of mem
60a0: 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f  ory used by memo
60b0: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e  ry-mapped I/O in
60c0: 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64   the VFS.*/.#ifd
60d0: 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69  ef __APPLE__.# i
60e0: 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f  nclude <TargetCo
60f0: 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20  nditionals.h>.# 
6100: 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48  if TARGET_OS_IPH
6110: 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51  ONE.#   undef SQ
6120: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6130: 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  ZE.#   define SQ
6140: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6150: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
6160: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
6170: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6180: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6190: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
61a0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
61b0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
61c0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
61d0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
61e0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
61f0: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
6200: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
6210: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
6220: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
6230: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6240: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6250: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
6260: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
6270: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
6280: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6290: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
62a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
62b0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
62c0: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
62d0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
62e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
62f0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6300: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
6310: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
6320: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
6330: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
6340: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
6350: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
6360: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
6370: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
6380: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
6390: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
63a0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
63b0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
63c0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
63d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
63e0: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
63f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6400: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
6410: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
6420: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
6430: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
6440: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
6450: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6460: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
6470: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6480: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
6490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
64a0: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
64b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
64c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
64d0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
64e0: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
64f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6500: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
6510: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
6520: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
6530: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
6540: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
6550: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
6560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6570: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6580: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
6590: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
65a0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
65b0: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
65c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
65d0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
65e0: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
65f0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
6600: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6610: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6620: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6630: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6640: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
6650: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6660: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
6670: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
6680: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
6690: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
66a0: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
66b0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
66c0: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
66d0: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
66e0: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
66f0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
6700: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
6710: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
6720: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
6730: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
6740: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
6750: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
6760: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
6770: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6780: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
6790: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
67a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
67b0: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
67c0: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
67d0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
67e0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
67f0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
6800: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
6810: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
6820: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
6830: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
6840: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
6850: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
6860: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
6870: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
6880: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
6890: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
68a0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
68b0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
68c0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
68d0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
68e0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
68f0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
6900: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
6910: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
6920: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6930: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
6940: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6950: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
6960: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
6970: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
6980: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
6990: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
69a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
69b0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
69c0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
69d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
69e0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
69f0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
6a00: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
6a10: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
6a20: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
6a30: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
6a40: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6a50: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6a60: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6a70: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6a80: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6a90: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6aa0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6ab0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6ac0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6ad0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6ae0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6af0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
6b00: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
6b10: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
6b20: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6b30: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
6b40: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
6b50: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6b60: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6b70: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6b80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6b90: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6ba0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6bb0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6bc0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6bd0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6be0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6bf0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
6c00: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
6c10: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
6c20: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
6c30: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
6c40: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
6c50: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6c60: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6c70: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6c80: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6ca0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6cb0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6cc0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6cd0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6ce0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6cf0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
6d00: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
6d10: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
6d20: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
6d30: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
6d40: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
6d50: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6d60: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6d70: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6d80: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6d90: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6da0: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6db0: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6dc0: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6dd0: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6de0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6df0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
6e00: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
6e10: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
6e20: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
6e30: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
6e40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6e50: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6e60: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6e70: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6e80: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6e90: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6ea0: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6eb0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6ec0: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6ed0: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6ee0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6ef0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
6f00: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
6f10: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
6f20: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
6f30: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6f40: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6f50: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6f60: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6f70: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6f80: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6f90: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6fa0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6fb0: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6fc0: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6fd0: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6fe0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6ff0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7000: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7010: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7020: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7030: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7040: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7050: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7060: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7070: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7080: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7090: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
70a0: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
70b0: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
70c0: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
70d0: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
70e0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
70f0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7100: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7110: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7120: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7130: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7140: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7150: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7160: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7170: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7180: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7190: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
71a0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
71b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
71c0: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
71d0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
71e0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
71f0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7200: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7210: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7220: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7230: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7240: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7250: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7260: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7270: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7280: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7290: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
72a0: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
72b0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
72c0: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
72d0: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
72e0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
72f0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
7300: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
7310: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7320: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
7330: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
7340: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
7350: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
7360: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
7370: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
7380: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
7390: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
73a0: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
73b0: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
73c0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
73d0: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
73e0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
73f0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
7400: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
7410: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
7420: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
7430: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
7440: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
7450: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
7460: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
7470: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
7480: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
7490: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
74a0: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
74b0: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
74c0: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
74d0: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
74e0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
74f0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
7500: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
7510: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
7520: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
7530: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
7540: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
7550: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
7560: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
7570: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
7580: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
7590: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
75a0: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
75b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
75c0: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
75d0: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
75e0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
75f0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
7600: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
7610: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
7620: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
7630: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
7640: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
7650: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
7660: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
7670: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
7680: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
7690: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
76a0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
76b0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
76c0: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
76d0: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
76e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
76f0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
7700: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
7710: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
7720: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
7730: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
7740: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
7750: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
7760: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
7770: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
7780: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
7790: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
77a0: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
77b0: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
77c0: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
77d0: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
77e0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
77f0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
7800: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
7810: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
7820: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
7830: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
7840: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
7850: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
7860: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
7870: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
7880: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7890: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
78a0: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
78b0: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
78c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
78e0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
78f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7900: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
7910: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7920: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
7930: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
7940: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
7950: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7960: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
7970: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7980: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
7990: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
79a0: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
79b0: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
79c0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
79d0: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
79e0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
79f0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
7a00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
7a10: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
7a20: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
7a30: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
7a40: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
7a50: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7a60: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7a70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a80: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7a90: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7aa0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7ab0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7ac0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7ad0: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7ae0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7af0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
7b00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
7b10: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
7b20: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
7b30: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
7b40: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
7b50: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7b60: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7b70: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7b80: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7b90: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7ba0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7bb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7bc0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7bd0: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7be0: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7bf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
7c00: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
7c10: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
7c20: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
7c30: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c40: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
7c50: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c60: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7c70: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7c80: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7c90: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7ca0: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7cb0: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7cc0: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7cd0: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7ce0: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7cf0: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
7d00: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
7d10: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
7d20: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
7d30: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
7d40: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
7d50: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7d60: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7d70: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7d80: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7d90: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7da0: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7db0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7dc0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7dd0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7de0: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7df0: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
7e00: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
7e10: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
7e20: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
7e30: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
7e40: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
7e50: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7e60: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7e70: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7e80: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
7e90: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
7ea0: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
7eb0: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
7ec0: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
7ed0: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
7ee0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7ef0: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
7f00: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
7f10: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
7f20: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
7f30: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
7f40: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
7f50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
7f60: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
7f70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7f80: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
7f90: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
7fa0: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
7fb0: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
7fc0: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
7fd0: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
7fe0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
7ff0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
8000: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
8010: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
8020: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
8030: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
8040: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
8050: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
8060: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
8070: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
8080: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
8090: 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d   disk */.  Schem
80a0: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
80b0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
80c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
80d0: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
80e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
80f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
8100: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
8110: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
8120: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
8130: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
8140: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
8150: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
8160: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
8170: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
8180: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
8190: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
81a0: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
81b0: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
81c0: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
81d0: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
81e0: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
81f0: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
8200: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
8210: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
8220: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
8230: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
8240: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a  ed object..** .*
8250: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
8260: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
8270: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
8280: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
8290: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
82a0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
82b0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
82c0: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
82d0: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
82e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
82f0: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
8300: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
8310: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
8320: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
8330: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
8340: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
8350: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
8360: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
8370: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
8380: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
8390: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
83a0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
83b0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
83c0: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
83d0: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
83e0: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
83f0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
8400: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
8410: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
8420: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
8430: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
8440: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
8450: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
8460: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
8470: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
8480: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
8490: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
84a0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
84b0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
84c0: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
84d0: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
84e0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
84f0: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
8500: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
8510: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
8520: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8530: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
8540: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
8550: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
8560: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8570: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
8580: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
8590: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
85a0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
85b0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
85c0: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
85d0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
85e0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
85f0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
8600: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
8610: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
8620: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
8630: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
8640: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
8650: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8660: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
8670: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
8680: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
8690: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
86a0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
86b0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
86c0: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
86d0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
86e0: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
86f0: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
8700: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
8710: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
8720: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
8730: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
8740: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70   in the .** Db.p
8750: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
8760: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
8770: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
8780: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
8790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
87a0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
87b0: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
87c0: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
87d0: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
87e0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
87f0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
8800: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
8810: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
8820: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
8830: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
8840: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
8850: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
8860: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
8870: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8880: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
8890: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
88a0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
88b0: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
88c0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
88d0: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
88e0: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
88f0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
8900: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
8910: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
8920: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
8930: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
8940: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
8950: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
8960: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
8970: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
8980: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
8990: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
89a0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
89b0: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
89c0: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
89d0: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
89e0: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
89f0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
8a00: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
8a10: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
8a20: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
8a30: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
8a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
8a50: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
8a60: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
8a70: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
8a80: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
8a90: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
8aa0: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
8ab0: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
8ac0: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
8ad0: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
8ae0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
8af0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
8b00: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
8b10: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
8b20: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
8b30: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
8b40: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
8b50: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
8b60: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
8b70: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
8b80: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
8b90: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
8ba0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
8bb0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
8bc0: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
8bd0: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
8be0: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
8bf0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
8c00: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
8c10: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
8c20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8c30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8c40: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
8c50: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8c60: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
8c70: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
8c80: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
8c90: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
8ca0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
8cb0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
8cc0: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
8cd0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
8ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
8cf0: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
8d00: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
8d10: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
8d20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
8d30: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
8d40: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
8d50: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
8d60: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
8d70: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
8d80: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
8d90: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
8da0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
8db0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
8dc0: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
8dd0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
8de0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
8df0: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
8e00: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
8e10: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
8e20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8e30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8e40: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
8e50: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
8e60: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
8e70: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
8e80: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
8e90: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
8ea0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8eb0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
8ec0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
8ed0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8ee0: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
8ef0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8f00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8f10: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
8f20: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
8f30: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
8f40: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
8f50: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8f60: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
8f70: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
8f80: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
8f90: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
8fa0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
8fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8fc0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
8fd0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
8fe0: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
8ff0: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
9000: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
9010: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
9020: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
9030: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
9040: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
9050: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
9060: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
9070: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
9080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9090: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
90a0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
90b0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
90c0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
90d0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
90e0: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
90f0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
9100: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
9110: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
9120: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
9130: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
9140: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9150: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
9160: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
9170: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
9180: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
9190: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
91a0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
91b0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
91c0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
91e0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
91f0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
9200: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
9210: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
9220: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9230: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
9240: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
9250: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
9260: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
9270: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
9280: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
9290: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
92a0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
92b0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
92c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
92d0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
92e0: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
92f0: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
9300: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
9310: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
9320: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
9330: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
9340: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
9350: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
9360: 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
9370: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9380: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
9390: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
93a0: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
93b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
93c0: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
93d0: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
93e0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
93f0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
9400: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9410: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
9420: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
9430: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
9440: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
9450: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
9460: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
9470: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
9480: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
9490: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
94a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
94b0: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
94c0: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
94d0: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
94e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
94f0: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
9500: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
9510: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9530: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
9540: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
9550: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
9560: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
9570: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
9580: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
9590: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
95a0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
95b0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
95c0: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
95d0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
95e0: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
95f0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
9600: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
9610: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
9620: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
9630: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
9640: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
9650: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
9660: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
9670: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
9680: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
9690: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
96a0: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
96b0: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
96c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
96d0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
96e0: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
96f0: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
9700: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
9710: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
9720: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
9730: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
9740: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
9750: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
9760: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
9770: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
9780: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
9790: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
97a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
97b0: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
97c0: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
97d0: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
97e0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
97f0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
9800: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
9810: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
9820: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9830: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9840: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9860: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9890: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
98a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
98b0: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
98c0: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
98d0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
98e0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
98f0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
9920: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  *);.#endif.../*.
9930: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
9940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
9950: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9960: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9970: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
9980: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
9990: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
99a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
99b0: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
99c0: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
99d0: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
99e0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
99f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
9a00: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
9a10: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
9a20: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
9a30: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
9a40: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
9a50: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
9a60: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
9a70: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9a80: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
9a90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9ab0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
9ac0: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ae0: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
9af0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
9b00: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
9b10: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9b20: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
9b30: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
9b40: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
9b50: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
9b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
9b70: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
9b80: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
9b90: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
9ba0: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
9bb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
9bc0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
9bd0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
9be0: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
9bf0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
9c00: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
9c10: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
9c20: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
9c30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c40: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
9c50: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
9c60: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
9c70: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
9c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
9c90: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
9ca0: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
9cb0: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
9cc0: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
9cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
9ce0: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
9cf0: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
9d00: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
9d30: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
9d40: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
9d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9d60: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9d70: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9d80: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9d90: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9da0: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9db0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9dc0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
9de0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
9df0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
9e00: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
9e10: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
9e20: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
9e30: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
9e40: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
9e50: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9e60: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9e70: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9e80: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9e90: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9ea0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9ec0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9ed0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
9ee0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
9ef0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
9f00: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
9f10: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
9f20: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
9f30: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
9f40: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
9f50: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9f60: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9f70: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9f80: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9f90: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9fa0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9fb0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9fc0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9fd0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9fe0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
9ff0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
a000: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
a010: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
a020: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a030: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
a040: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
a050: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a060: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a080: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
a090: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
a0a0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a0b0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
a0c0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
a0d0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
a0e0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
a0f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
a100: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
a110: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
a120: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
a130: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
a140: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
a150: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
a160: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
a170: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
a180: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
a190: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
a1a0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
a1b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
a1c0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
a1f0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
a200: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
a210: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
a220: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
a230: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
a240: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
a250: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
a260: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
a270: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
a280: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
a290: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
a2a0: 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65  u8 imposterTable
a2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
a2c0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
a2d0: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d  ter table */.  }
a2e0: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
a2f0: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
a300: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a310: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
a320: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
a330: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a350: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a360: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a370: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
a380: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a3a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a3b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a3c0: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
a3d0: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
a400: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
a410: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
a420: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
a430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a440: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
a450: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
a460: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
a470: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
a480: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a490: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
a4a0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
a4b0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
a4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a4d0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
a4e0: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
a4f0: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
a500: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
a510: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
a520: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
a530: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
a540: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a560: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
a570: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
a580: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
a590: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
a5a0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
a5b0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
a5c0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a5d0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a600: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
a610: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a620: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
a630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a640: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
a650: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
a660: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
a670: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
a680: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
a690: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a6a0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
a6b0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
a6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a6d0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
a6e0: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
a6f0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
a700: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
a710: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
a720: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a730: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
a740: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
a750: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
a760: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
a770: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
a780: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
a790: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
a7a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
a7b0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
a7c0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
a7d0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
a7e0: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
a7f0: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
a800: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
a810: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
a820: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
a830: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
a840: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
a850: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
a860: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a870: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
a880: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
a890: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
a8a0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
a8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
a8c0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
a8d0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
a8e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
a8f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
a900: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
a910: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
a920: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
a930: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
a940: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
a950: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
a960: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
a970: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
a980: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
a990: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
a9a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
a9b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a9c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
a9d0: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
a9e0: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
a9f0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
aa00: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
aa10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
aa20: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
aa30: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
aa40: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
aa50: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
aa60: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
aa70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
aa80: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
aa90: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
aaa0: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
aab0: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
aac0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
aad0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
aae0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
aaf0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
ab00: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ab10: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
ab20: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
ab30: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ab40: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
ab50: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
ab60: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
ab70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
ab80: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
ab90: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
aba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
abb0: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
abc0: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
abd0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
abe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
abf0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
ac00: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
ac10: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
ac20: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
ac30: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
ac40: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
ac50: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
ac60: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
ac70: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
ac80: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
ac90: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
aca0: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
acb0: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
acc0: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
acd0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
ace0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
acf0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
ad00: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
ad10: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
ad20: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
ad30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
ad40: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
ad50: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
ad60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
ad70: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ad80: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
ad90: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
ada0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
adb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
adc0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
add0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
ade0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
adf0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
ae00: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
ae10: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
ae20: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
ae30: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
ae40: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
ae50: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
ae60: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
ae70: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
ae80: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
ae90: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
aec0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
aed0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
aee0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af00: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
af10: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
af20: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
af30: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
af40: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
af50: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
af60: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
af70: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
af80: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
af90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
afa0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
afb0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
afc0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
afd0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
afe0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
aff0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
b000: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
b010: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
b020: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
b030: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
b040: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
b050: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
b060: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
b070: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
b080: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
b090: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
b0a0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
b0b0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
b0c0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
b0d0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
b0e0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b0f0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
b100: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
b110: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
b120: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
b130: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b140: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
b150: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
b160: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
b170: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
b180: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
b190: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
b1a0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
b1b0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
b1c0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
b1d0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
b1e0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
b1f0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
b200: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
b210: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
b220: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
b230: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
b240: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
b250: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
b260: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
b270: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
b280: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b2a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
b2b0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
b2c0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
b2d0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
b2e0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
b2f0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
b300: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
b310: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
b320: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
b330: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
b340: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
b350: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
b360: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b370: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
b380: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
b390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
b3a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
b3b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
b3c0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
b3d0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
b3e0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
b3f0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
b400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
b410: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
b420: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
b430: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
b440: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
b450: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
b460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
b470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
b480: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
b490: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
b4a0: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
b4b0: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
b4c0: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
b4d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b4e0: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
b4f0: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
b500: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
b510: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
b520: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b530: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
b540: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
b550: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
b560: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
b570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b580: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
b590: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
b5a0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
b5b0: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
b5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5d0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
b5e0: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f  0x00000010  /* O
b5f0: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
b600: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
b610: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
b620: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
b630: 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  20  /* Show full
b640: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
b650: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
b660: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
b670: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
b680: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
b690: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
b6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6b0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
b6c0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
b6d0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
b6e0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
b6f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b720: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
b730: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
b740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b760: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
b770: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
b780: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
b790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
b7a0: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
b7b0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
b7c0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
b7d0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
b810: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
b820: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
b830: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
b840: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
b850: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
b860: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
b870: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b880: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
b890: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
b8a0: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
b8b0: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
b8c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b8d0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
b8e0: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
b8f0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
b900: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
b910: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b920: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
b930: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
b940: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
b950: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
b960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
b970: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
b980: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
b990: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
b9a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
b9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b9c0: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
b9d0: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
b9e0: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
b9f0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ba00: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
ba10: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
ba20: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
ba30: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
ba40: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
ba50: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
ba60: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
ba70: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
ba80: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
ba90: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
baa0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
bab0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
bac0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
bad0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bae0: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
baf0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
bb00: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
bb10: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
bb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
bb30: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
bb40: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
bb50: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
bb60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
bb70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bb80: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
bb90: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
bba0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
bbb0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
bbc0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
bbd0: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
bbe0: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
bbf0: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
bc00: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
bc10: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
bc20: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
bc30: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
bc40: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
bc50: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
bc60: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
bc70: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
bc80: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
bc90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bca0: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
bcb0: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
bcc0: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
bcd0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
bce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
bcf0: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
bd00: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
bd10: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
bd20: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bd30: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
bd40: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
bd50: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
bd60: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
bd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61  define SQLITE_Va
bd80: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
bd90: 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72  8000000  /* Curr
bda0: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
bdb0: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  M */.#define SQL
bdc0: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
bdd0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
bde0: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
bdf0: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
be00: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
be10: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
be20: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
be30: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
be40: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
be50: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
be60: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
be70: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
be80: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
be90: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
bea0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
beb0: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
bec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
bed0: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
bee0: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
bef0: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
bf00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
bf10: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
bf20: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
bf30: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
bf40: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
bf50: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
bf60: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
bf70: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
bf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
bf90: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
bfa0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
bfb0: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
bfd0: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
bfe0: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
bff0: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
c000: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c010: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
c020: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
c030: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
c040: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
c050: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
c060: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
c070: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
c080: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
c090: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
c0a0: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
c0b0: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
c0c0: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
c0d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0e0: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
c0f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
c100: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
c110: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
c120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c130: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
c140: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
c150: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
c160: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c170: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
c180: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
c190: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
c1a0: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
c1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
c1c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
c1d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
c1e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
c1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c200: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
c210: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
c220: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
c230: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
c240: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
c250: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
c260: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
c270: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
c280: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
c290: 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
c2a0: 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70  _TEST.#define Op
c2b0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
c2c0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
c2d0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
c2e0: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
c2f0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c300: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
c310: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
c320: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
c330: 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  =0).#else.#defin
c340: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
c350: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
c360: 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69    0.#define Opti
c370: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
c380: 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65  db, mask)   1.#e
c390: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
c3a0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
c3b0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
c3c0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
c3d0: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
c3e0: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
c3f0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
c400: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
c410: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
c420: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
c430: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
c440: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
c450: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
c460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
c470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
c480: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
c490: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
c4a0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
c4b0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
c4c0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
c4d0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
c4e0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
c4f0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
c500: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c510: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
c520: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
c530: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
c560: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
c570: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
c580: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c590: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
c5a0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
c5b0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
c5c0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
c5d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c5e0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
c5f0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
c600: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
c610: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
c620: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
c630: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
c640: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
c650: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
c660: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
c670: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
c680: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
c690: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
c6a0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
c6b0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
c6c0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
c6d0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
c6e0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c6f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
c700: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
c710: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
c720: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
c730: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
c740: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
c750: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
c760: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
c770: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
c780: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
c790: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
c7a0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
c7b0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
c7c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
c7d0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
c7e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c7f0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
c800: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
c810: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
c820: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
c830: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
c840: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
c850: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
c860: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
c870: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
c880: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
c890: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
c8a0: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
c8b0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
c8c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
c8d0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
c8e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
c8f0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
c900: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
c910: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
c920: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c930: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
c940: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
c950: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
c960: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
c970: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c980: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
c990: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
c9a0: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
c9b0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
c9c0: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
c9d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c9e0: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
c9f0: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
ca00: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
ca10: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
ca20: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
ca30: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ca40: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ca50: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
ca60: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ca70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
ca80: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
ca90: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
caa0: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
cab0: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
cac0: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
cad0: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
cae0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
caf0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
cb00: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
cb10: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
cb20: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
cb30: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
cb40: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
cb50: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
cb60: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
cb70: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
cb80: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
cb90: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
cba0: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
cbb0: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
cbc0: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
cbd0: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
cbe0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
cbf0: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
cc00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
cc10: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
cc20: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
cc30: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
cc40: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
cc50: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
cc60: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
cc70: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
cc80: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
cc90: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
cca0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
ccb0: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
ccc0: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
ccd0: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
cce0: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
ccf0: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
cd00: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
cd10: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
cd20: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
cd30: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
cd40: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
cd50: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
cd60: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
cd70: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
cd80: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
cd90: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
cda0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
cdb0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
cdc0: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
cdd0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
cde0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
cdf0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
ce00: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
ce10: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
ce20: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
ce30: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
ce40: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
ce50: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
ce60: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
ce70: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
ce80: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
ce90: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
cea0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
ceb0: 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51  ASK  0x003 /* SQ
cec0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
ced0: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
cee0: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
cef0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
cf00: 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61       0x004 /* Ca
cf10: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
cf20: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
cf30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
cf40: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
cf50: 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d    0x008 /* Case-
cf60: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
cf70: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
cf80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cf90: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
cfa0: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
cfb0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
cfc0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
cfd0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
cfe0: 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69  LL 0x020 /* sqli
cff0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
d000: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
d010: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  led */.#define S
d020: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
d030: 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69  H   0x040 /* Bui
d040: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
d050: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
d060: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
d070: 59 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a  YPEOF   0x080 /*
d080: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
d090: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
d0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d0b0: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30  NC_COUNT    0x10
d0c0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
d0d0: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
d0e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0f0: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
d100: 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x200 /* Built-
d110: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
d120: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
d130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d140: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20  _UNLIKELY 0x400 
d150: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69  /* Built-in unli
d160: 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  kely() function 
d170: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d180: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
d190: 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  0x800 /* Constan
d1a0: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
d1b0: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
d1c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d1d0: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30  E_FUNC_MINMAX  0
d1e0: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
d1f0: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
d200: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
d210: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
d220: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
d230: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
d240: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
d250: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
d260: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
d270: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
d280: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
d290: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
d2a0: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
d2b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d2c0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
d2d0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
d2e0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
d2f0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
d300: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
d310: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
d320: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
d330: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
d340: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
d350: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
d360: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
d370: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
d380: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
d390: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
d3a0: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
d3b0: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
d3c0: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
d3d0: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
d3e0: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
d3f0: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
d400: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
d410: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
d420: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
d430: 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
d440: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d450: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
d460: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
d470: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
d480: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
d490: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
d4a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
d4b0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
d4c0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
d4d0: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
d4e0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
d4f0: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
d500: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
d510: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
d520: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
d530: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
d540: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
d550: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
d560: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
d570: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
d580: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
d590: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
d5a0: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
d5b0: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
d5c0: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
d5d0: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
d5e0: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
d5f0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d600: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d610: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d620: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d630: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
d640: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d650: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
d660: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
d670: 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74   C .**     funct
d680: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
d690: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
d6a0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
d6b0: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
d6c0: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
d6d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
d6e0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
d6f0: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
d700: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
d710: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
d720: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
d730: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
d740: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
d750: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
d760: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
d770: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d780: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
d790: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
d7a0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
d7b0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d7c0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d7d0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
d7e0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
d7f0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
d800: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
d810: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
d820: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
d830: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
d840: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d850: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d860: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d870: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
d880: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
d890: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
d8a0: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
d8b0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
d8c0: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
d8d0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
d8e0: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
d8f0: 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
d900: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
d910: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d920: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d930: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
d940: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d950: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d960: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d970: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d980: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
d990: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
d9a0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
d9b0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d9c0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d9d0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d9e0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d9f0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
da00: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
da10: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
da20: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
da30: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
da40: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
da50: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
da60: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
da70: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
da80: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
da90: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
daa0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dab0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
dac0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dad0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dae0: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
daf0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
db00: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
db10: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
db20: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
db30: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
db40: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
db50: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
db60: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
db70: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
db80: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
db90: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
dba0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
dbb0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
dbc0: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
dbd0: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
dbe0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
dbf0: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
dc00: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
dc10: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
dc20: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
dc30: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
dc40: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
dc50: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
dc60: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
dc70: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
dc80: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
dc90: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
dca0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
dcb0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
dcc0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
dcd0: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
dce0: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
dcf0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
dd00: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
dd10: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
dd20: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
dd40: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
dd50: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
dd60: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
dd70: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
dd80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
dd90: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
dda0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
ddb0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
ddc0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
ddd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
dde0: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
ddf0: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
de00: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
de10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
de20: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
de30: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
de40: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
de50: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
de60: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
de70: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
de80: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
de90: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
dea0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
deb0: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
dec0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
ded0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
dee0: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
def0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
df00: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
df10: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
df20: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
df30: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
df40: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
df50: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
df60: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
df70: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
df80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
df90: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
dfa0: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
dfb0: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
dfc0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
dfd0: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
dfe0: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
dff0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
e000: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
e010: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
e020: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
e030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e040: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
e050: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e060: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
e090: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e0a0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e0b0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e0c0: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
e0d0: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
e0e0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
e0f0: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
e100: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
e110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
e120: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
e130: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
e140: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e150: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e160: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e170: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e180: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e190: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e1a0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e1b0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e1c0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e1d0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e1e0: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e1f0: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e200: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e210: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e220: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e230: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e240: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e250: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e260: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e270: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e280: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e290: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e2a0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e2b0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e2c0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e2d0: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e2e0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e2f0: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e300: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e310: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e320: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e330: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e340: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e350: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e360: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e370: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
e380: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
e390: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e3a0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e3b0: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e3c0: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e3d0: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e3e0: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e3f0: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e400: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e410: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e420: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e430: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e440: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e450: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e460: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e470: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e480: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e490: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e4a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
e4b0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
e4c0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e4d0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e4e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e4f0: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
e500: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
e510: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
e520: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
e530: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
e540: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
e550: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
e560: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
e570: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
e580: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
e590: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
e5a0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
e5b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
e5c0: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
e5d0: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
e5e0: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
e5f0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
e600: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
e610: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
e620: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
e630: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e640: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
e650: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
e660: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
e670: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
e680: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
e690: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
e6a0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
e6b0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
e6c0: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
e6d0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
e6e0: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
e6f0: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
e700: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
e710: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
e720: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
e730: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
e740: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
e750: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
e760: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
e770: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
e780: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
e790: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e7a0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
e7b0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
e7c0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
e7d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
e7e0: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
e7f0: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
e800: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
e810: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
e820: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
e830: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
e840: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
e850: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
e860: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
e870: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
e880: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
e890: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
e8a0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
e8b0: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
e8c0: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
e8d0: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
e8e0: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
e8f0: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
e900: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
e910: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
e920: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
e930: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
e940: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
e950: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
e960: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
e970: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
e980: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
e990: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
e9a0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
e9b0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
e9c0: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
e9d0: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
e9e0: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
e9f0: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ea00: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ea10: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
ea20: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
ea30: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
ea40: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
ea50: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
ea60: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
ea70: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
ea80: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
ea90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaa0: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
eab0: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
eac0: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
ead0: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
eae0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
eaf0: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
eb00: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
eb10: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
eb20: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
eb30: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
eb40: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
eb50: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
eb60: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
eb70: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
eb80: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
eb90: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
eba0: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
ebb0: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
ebc0: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
ebd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ebe0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
ebf0: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
ec00: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
ec10: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
ec20: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
ec30: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
ec40: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
ec50: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
ec60: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
ec70: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
ec80: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
ec90: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
eca0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
ecb0: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
ecc0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
ecd0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
ece0: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
ecf0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
ed00: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
ed10: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
ed20: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
ed30: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
ed40: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
ed50: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
ed60: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ed70: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
ed80: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
ed90: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
eda0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
edb0: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
edc0: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
edd0: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
ede0: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
edf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
ee00: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
ee10: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
ee20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee30: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
ee40: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
ee50: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
ee60: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
ee70: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
ee80: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
ee90: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
eea0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
eeb0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
eec0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
eed0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
eee0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
eef0: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
ef00: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
ef10: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
ef20: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
ef30: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ef40: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
ef50: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
ef60: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
ef70: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
ef80: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
ef90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
efa0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
efb0: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
efc0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
efd0: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
efe0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
eff0: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f000: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f010: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f020: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f030: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f040: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f050: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f060: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f070: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f080: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f090: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f0a0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f0b0: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f0c0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f0d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f0e0: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f0f0: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f100: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f110: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f120: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f130: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f140: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f150: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f160: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f170: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f180: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f190: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f1a0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f1b0: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f1c0: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f1d0: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f1e0: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f1f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f200: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f210: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f220: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f230: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f240: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f250: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f260: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f270: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f280: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f290: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f2a0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f2b0: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f2c0: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f2d0: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f2e0: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f2f0: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f300: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f310: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f320: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f330: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f340: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f350: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f360: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f370: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f380: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f390: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f3a0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f3b0: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f3c0: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f3d0: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f3e0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f3f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f400: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f410: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f420: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f430: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f440: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f450: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f460: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f470: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f480: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f490: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f4a0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
f4b0: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
f4c0: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
f4d0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
f4e0: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
f4f0: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
f500: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f510: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
f520: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
f530: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
f540: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
f550: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
f560: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
f570: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
f580: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
f590: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
f5a0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
f5b0: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
f5c0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
f5d0: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
f5e0: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
f5f0: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
f600: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
f610: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
f620: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
f630: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
f640: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
f650: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
f660: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
f670: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
f680: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
f690: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
f6a0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
f6b0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
f6c0: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
f6d0: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
f6e0: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
f6f0: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
f700: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
f710: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
f720: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
f730: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
f740: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
f750: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
f760: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
f770: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
f780: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
f790: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
f7a0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
f7b0: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
f7c0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
f7d0: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
f7e0: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
f7f0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
f800: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
f810: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
f820: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f830: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
f840: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
f850: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
f860: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
f870: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
f880: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
f890: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
f8a0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
f8b0: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
f8c0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
f8d0: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
f8e0: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f900: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
f910: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
f920: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
f930: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
f940: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
f950: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
f960: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
f970: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
f980: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
f990: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
f9a0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
f9b0: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
f9c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
f9d0: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
f9e0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
f9f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
fa00: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
fa10: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
fa20: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
fa30: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
fa40: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
fa50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
fa60: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
fa70: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
fa80: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
fa90: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
faa0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
fab0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
fac0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
fad0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
fae0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
faf0: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
fb00: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
fb10: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
fb20: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
fb30: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
fb40: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
fb50: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
fb60: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
fb70: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
fb80: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
fb90: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
fba0: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
fbb0: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
fbc0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
fbd0: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
fbe0: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
fbf0: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
fc00: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66  ch column */.#if
fc10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fc20: 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73  _CHECK.  ExprLis
fc30: 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
fc40: 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
fc50: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
fc60: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
fc70: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
fc80: 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  BTree page for t
fc90: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  his table */.  i
fca0: 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
fcb0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
fcc0: 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
fcd0: 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
fce0: 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
fcf0: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
fd00: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
fd10: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
fd20: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fd40: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
fd50: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
fd60: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
fd70: 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
fd80: 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
fd90: 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
fda0: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
fdb0: 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
fdc0: 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
fdd0: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
fde0: 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
fdf0: 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
fe00: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
fe10: 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
fe20: 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
fe30: 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
fe40: 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
fe50: 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
fe60: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
fe70: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
fe80: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
fe90: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
fea0: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
feb0: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
fec0: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
fed0: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
fee0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
fef0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
ff00: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
ff10: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
ff20: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
ff30: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
ff40: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
ff50: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
ff60: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
ff70: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
ff80: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
ff90: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
ffa0: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
ffb0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
ffc0: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a  oduleArg;  /* 0:
ffd0: 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d   module 1: schem
ffe0: 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33  a 2: vtab name 3
fff0: 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56  ...: args */.  V
10000 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
10010 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
10020 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
10030 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
10040 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
10050 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
10060 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
10070 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
10080 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10090 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
100a0 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
100b0 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
100c0 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
100d0 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
100e0 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
100f0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
10100 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10110 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
10120 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69  ..**.** TF_OOOHi
10130 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  dden applies to 
10140 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
10150 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20  hat have hidden 
10160 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
10170 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  .** followed by 
10180 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10190 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22  ns.  Example:  "
101a0 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
101b0 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20  ABLE x USING.** 
101c0 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20  vtab1(a HIDDEN, 
101d0 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22  b);".  Since "b"
101e0 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e   is a non-hidden
101f0 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20   column but "a" 
10200 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68  is hidden,.** th
10210 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  e TF_OOOHidden a
10220 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61  ttribute would a
10230 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73  pply in this cas
10240 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20  e.  Such tables 
10250 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69  require.** speci
10260 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69  al handling duri
10270 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73  ng INSERT proces
10280 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  sing..*/.#define
10290 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
102a0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
102b0 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
102c0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
102d0 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
102e0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
102f0 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
10300 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
10310 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
10320 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
10330 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
10340 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
10350 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
10360 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
10370 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
10380 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
10390 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
103a0 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
103b0 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
103c0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
103d0 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
103e0 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
103f0 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
10400 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
10410 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
10420 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
10430 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a  owid  0x40    /*
10440 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
10450 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
10460 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
10470 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
10480 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
10490 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
104a0 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  umns */.../*.** 
104b0 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
104c0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
104d0 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
104e0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
104f0 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
10500 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
10510 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
10520 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
10530 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
10540 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
10550 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
10560 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10570 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
10580 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
10590 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
105a0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
105b0 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
105c0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
105d0 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
105e0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
105f0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
10600 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
10610 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
10620 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
10630 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10640 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f   0.#endif../* Do
10650 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
10660 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
10670 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
10680 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
10690 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
106a0 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
106b0 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
106c0 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
106d0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
106e0 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
106f0 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
10700 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
10710 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
10720 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10730 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
10740 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
10750 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
10760 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
10770 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
10780 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
10790 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
107a0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
107b0 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
107c0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
107d0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
107e0 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
107f0 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
10800 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
10810 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
10820 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
10830 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
10840 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
10850 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
10860 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
10870 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
10880 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
10890 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
108a0 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
108b0 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
108c0 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
108d0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
108e0 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
108f0 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
10900 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
10910 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
10920 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
10930 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
10940 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
10950 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
10960 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
10970 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
10980 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10990 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
109a0 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
109b0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
109c0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
109d0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
109e0 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
109f0 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
10a00 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
10a10 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
10a20 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10a30 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
10a40 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
10a50 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
10a60 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
10a70 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
10a80 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
10a90 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
10aa0 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
10ab0 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
10ac0 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
10ad0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
10ae0 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
10af0 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
10b00 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
10b10 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
10b20 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
10b30 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
10b40 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10b50 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
10b60 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
10b70 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
10b80 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
10b90 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
10ba0 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
10bb0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
10bc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10bd0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
10be0 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
10bf0 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
10c00 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
10c10 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
10c20 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
10c30 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
10c40 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
10c50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
10c60 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
10c70 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
10c80 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
10c90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10ca0 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
10cb0 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
10cc0 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
10cd0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
10ce0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
10cf0 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
10d00 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
10d10 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
10d20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
10d30 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
10d40 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
10d50 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
10d60 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
10d70 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
10d80 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
10d90 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
10da0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
10db0 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
10dc0 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
10dd0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
10de0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
10df0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
10e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10e10 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
10e20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
10e30 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
10e40 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10e50 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
10e60 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
10e70 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
10e80 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
10e90 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
10ea0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
10eb0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
10ec0 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
10ed0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
10ee0 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
10ef0 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
10f00 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
10f10 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
10f20 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
10f30 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10f40 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
10f50 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10f60 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
10f70 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
10f80 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
10f90 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
10fa0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
10fb0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
10fc0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
10fd0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
10fe0 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
10ff0 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
11000 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
11010 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
11020 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
11030 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
11040 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
11050 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
11060 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
11070 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
11080 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
11090 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
110a0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
110b0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
110c0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
110d0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
110e0 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
110f0 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
11100 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
11110 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
11120 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
11130 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
11140 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
11150 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
11160 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
11170 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
11180 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
11190 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
111a0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
111b0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
111c0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
111d0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
111e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
111f0 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
11200 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
11210 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
11220 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
11230 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
11240 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
11250 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
11260 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
11270 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
11280 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
11290 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
112a0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
112b0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
112c0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
112d0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
112e0 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
112f0 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
11300 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
11310 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
11320 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
11330 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
11340 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
11350 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
11360 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
11370 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
11380 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
11390 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
113a0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
113b0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
113c0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
113d0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
113e0 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
113f0 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
11400 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
11410 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
11420 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
11430 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
11440 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
11450 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
11460 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
11470 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
11480 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
11490 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
114a0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
114b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
114c0 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
114d0 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
114e0 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
114f0 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
11500 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
11510 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
11520 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
11530 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
11540 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
11550 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
11560 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
11570 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
11580 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
11590 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
115a0 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
115b0 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
115c0 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
115d0 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
115e0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
115f0 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
11600 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
11610 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
11620 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
11630 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
11640 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
11650 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
11660 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11670 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
11680 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
11690 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
116a0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
116b0 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
116c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
116d0 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
116e0 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
116f0 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
11700 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
11710 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
11720 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
11730 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
11740 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11750 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11760 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
11770 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
11780 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11790 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
117a0 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
117b0 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
117c0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
117d0 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
117e0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
117f0 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
11800 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
11810 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
11820 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
11830 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
11840 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
11850 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
11860 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
11870 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
11880 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
11890 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
118a0 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
118b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
118c0 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
118d0 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
118e0 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
118f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
11900 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
11910 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
11920 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
11930 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
11940 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11950 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
11960 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
11970 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
11980 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11990 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
119a0 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
119b0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
119c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
119d0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
119e0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
119f0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
11a00 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
11a10 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
11a20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
11a30 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
11a40 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
11a50 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
11a60 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
11a70 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11a80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11a90 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
11aa0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11ab0 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
11ac0 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
11ad0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
11ae0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
11af0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
11b00 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
11b10 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
11b20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
11b30 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
11b40 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
11b50 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
11b60 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
11b70 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
11b80 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
11b90 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
11ba0 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
11bb0 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
11bc0 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
11bd0 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
11be0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
11bf0 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
11c00 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
11c10 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
11c20 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
11c30 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
11c40 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
11c50 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
11c60 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
11c70 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
11c80 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
11c90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
11ca0 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
11cb0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
11cc0 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
11cd0 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
11ce0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
11cf0 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
11d00 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
11d10 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
11d20 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
11d30 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
11d40 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11d50 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
11d60 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
11d70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
11d80 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11d90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11da0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
11db0 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
11dc0 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
11dd0 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
11de0 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
11df0 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
11e00 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
11e10 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
11e20 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
11e30 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
11e40 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
11e50 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
11e60 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
11e70 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
11e80 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
11e90 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
11ea0 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11ec0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
11ed0 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
11ee0 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
11ef0 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
11f00 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11f10 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
11f20 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11f30 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11f40 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
11f50 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
11f60 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
11f70 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
11f80 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
11f90 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
11fa0 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
11fb0 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
11fc0 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
11fd0 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
11fe0 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
11ff0 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
12000 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
12010 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
12020 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
12030 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
12040 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
12050 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
12060 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
12070 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
12080 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
12090 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
120a0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
120b0 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
120c0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
120d0 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
120e0 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
120f0 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
12100 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
12110 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
12120 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
12130 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
12140 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
12150 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
12160 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
12170 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
12180 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
12190 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
121a0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
121b0 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
121c0 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
121d0 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
121e0 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
121f0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
12200 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
12210 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
12220 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
12230 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
12240 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
12250 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
12260 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
12270 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
12280 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
12290 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
122a0 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
122b0 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
122c0 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
122d0 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
122e0 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
122f0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
12300 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
12310 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
12320 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
12330 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
12340 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
12350 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
12360 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
12370 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
12380 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
12390 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
123a0 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
123b0 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
123c0 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
123d0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
123e0 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
123f0 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
12400 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
12410 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
12420 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
12430 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
12440 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
12450 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
12460 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
12470 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
12480 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
12490 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
124a0 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
124b0 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
124c0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
124d0 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
124e0 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
124f0 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
12500 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
12510 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
12520 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
12530 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
12540 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
12550 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
12560 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
12570 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
12580 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
12590 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
125a0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
125c0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
125d0 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
125e0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
125f0 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
12600 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
12610 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
12620 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
12630 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
12640 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
12650 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
12660 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
12670 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
12680 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
12690 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
126a0 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
126b0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
126c0 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
126d0 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
126e0 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
126f0 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
12700 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
12710 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12720 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
12730 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
12740 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
12750 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
12760 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
12770 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
12780 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12790 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
127a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
127b0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
127c0 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
127d0 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
127e0 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
127f0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
12800 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
12810 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
12820 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
12830 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
12840 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
12850 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
12860 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ces */.  int tnu
12870 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
12880 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
12890 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
128a0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
128b0 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b  LogEst szIdxRow;
128c0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
128d0 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f  mated average ro
128e0 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  w size in bytes 
128f0 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c  */.  u16 nKeyCol
12900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12910 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12920 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b  ns forming the k
12930 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c  ey */.  u16 nCol
12940 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
12950 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12960 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20  lumns stored in 
12970 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
12980 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
12990 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
129a0 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
129b0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
129c0 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
129d0 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20  gned idxType:2; 
129e0 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55       /* 1==UNIQU
129f0 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
12a00 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
12a10 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
12a20 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
12a30 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
12a40 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
12a50 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
12a60 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
12a70 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
12a80 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
12a90 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
12aa0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75  l columns */.  u
12ab0 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65  nsigned isResize
12ac0 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  d:1;    /* True 
12ad0 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62  if resizeIndexOb
12ae0 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20  ject() has been 
12af0 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69  called */.  unsi
12b00 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a  gned isCovering:
12b10 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
12b20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69  this is a coveri
12b30 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e  ng index */.  un
12b40 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61  signed noSkipSca
12b50 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  n:1;   /* Do not
12b60 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70   try to use skip
12b70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f  -scan if true */
12b80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
12b90 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
12ba0 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70  TAT4.  int nSamp
12bb0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
12bc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  /* Number of ele
12bd0 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65  ments in aSample
12be0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d  [] */.  int nSam
12bf0 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  pleCol;         
12c00 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65   /* Size of Inde
12c10 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61  xSample.anEq[] a
12c20 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52  nd so on */.  tR
12c30 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20  owcnt *aAvgEq;  
12c40 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67         /* Averag
12c50 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72  e nEq values for
12c60 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61   keys not in aSa
12c70 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53  mple */.  IndexS
12c80 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20  ample *aSample; 
12c90 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66     /* Samples of
12ca0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
12cb0 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ey */.  tRowcnt 
12cc0 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
12cd0 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
12ce0 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66  mic stat1 data f
12cf0 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
12d00 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
12d10 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  st0;        /* N
12d20 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e  on-logarithmic n
12d30 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
12d40 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65   the index */.#e
12d50 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
12d60 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
12d70 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
12d80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12d90 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
12da0 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
12db0 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
12dc0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
12dd0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12de0 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
12df0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
12e00 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
12e10 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
12e20 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12e30 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
12e40 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
12e50 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
12e60 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  e */../* Return 
12e70 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
12e80 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
12e90 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
12ea0 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
12eb0 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
12ec0 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
12ed0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
12ee0 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  )../* Return tru
12ef0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
12f00 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a  a UNIQUE index *
12f10 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71  /.#define IsUniq
12f20 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20  ueIndex(X)      
12f30 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f  ((X)->onError!=O
12f40 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45  E_None)../*.** E
12f50 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
12f60 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
12f70 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
12f80 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
12f90 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
12fa0 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
12fb0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
12fc0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
12fd0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
12fe0 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
12ff0 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
13000 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
13010 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
13020 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
13030 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
13040 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
13050 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
13060 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
13070 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
13080 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
13090 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
130a0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
130b0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
130c0 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
130d0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
130e0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
130f0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
13100 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
13110 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
13120 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
13130 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
13140 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
13150 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
13160 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
13170 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
13180 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
13190 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
131a0 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
131b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
131c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
131d0 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
131e0 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
131f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
13200 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
13210 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
13220 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
13230 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
13240 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
13250 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
13260 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
13270 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
13280 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
13290 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
132a0 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
132b0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
132c0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
132d0 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
132e0 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
132f0 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
13300 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
13310 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
13320 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
13330 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
13340 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
13350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13360 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
13370 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
13380 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
13390 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
133a0 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
133b0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
133c0 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
133d0 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
133e0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
133f0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
13400 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
13410 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
13420 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
13430 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
13440 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
13450 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
13460 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
13470 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
13480 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
13490 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
134a0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
134b0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
134c0 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
134d0 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
134e0 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
134f0 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
13500 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
13510 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
13520 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
13530 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
13540 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
13550 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
13560 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
13570 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
13580 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
13590 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
135a0 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
135b0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
135c0 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
135d0 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
135e0 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
135f0 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
13620 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
13630 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
13640 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
13650 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
13660 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
13670 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
13680 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
13690 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
136c0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
136d0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
136e0 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
136f0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
13700 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
13710 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
13720 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
13730 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
13740 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
13750 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
13760 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
13770 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13780 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
13790 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
137a0 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
137b0 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
137c0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
137d0 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
137e0 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
137f0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
13800 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
13810 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
13820 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
13830 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
13840 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
13850 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
13860 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
13870 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
13880 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
13890 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
138a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
138b0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
138c0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
138d0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
138e0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
138f0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
13900 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
13910 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
13920 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
13930 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
13940 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
13950 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
13960 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
13970 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
13980 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
13990 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
139a0 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
139b0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
139c0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
139d0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
139e0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
139f0 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
13a00 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
13a10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13a20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
13a30 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
13a40 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
13a50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13a60 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
13a70 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
13a80 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
13ab0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
13ac0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
13ad0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
13b00 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
13b10 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
13b20 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
13b30 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
13b40 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
13b50 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
13b60 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
13b70 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
13b80 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
13b90 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
13ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13bb0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13bc0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
13bd0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
13be0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
13bf0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
13c00 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
13c10 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
13c20 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
13c30 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
13c40 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
13c50 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
13c60 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
13c70 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
13c80 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
13c90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13ca0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
13cb0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
13cc0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
13cd0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
13ce0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
13cf0 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
13d00 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
13d10 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
13d20 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
13d30 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
13d40 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
13d50 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
13d60 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
13d70 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
13d80 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
13d90 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
13da0 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
13db0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
13dc0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
13dd0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
13de0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
13df0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
13e00 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
13e10 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
13e20 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
13e30 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
13e40 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
13e50 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
13e60 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
13e70 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13e80 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
13e90 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
13ea0 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
13eb0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
13ec0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
13ed0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
13ee0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
13ef0 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
13f00 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
13f10 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
13f20 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
13f30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
13f40 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
13f50 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
13f60 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
13f70 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
13f80 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
13f90 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
13fa0 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
13fb0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
13fc0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
13fd0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
13fe0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
13ff0 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
14000 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
14010 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
14020 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
14030 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
14040 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
14050 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
14060 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
14070 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
14080 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
14090 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
140a0 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
140b0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
140c0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
140d0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
140e0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
140f0 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
14100 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
14110 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
14120 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
14130 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
14140 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
14150 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
14160 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
14170 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
14180 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
14190 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
141a0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
141b0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
141c0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
141d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
141e0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
141f0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
14200 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
14210 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
14220 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
14230 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
14240 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
14250 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
14260 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
14270 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
14280 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
14290 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
142a0 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
142b0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
142c0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
142d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
142e0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
142f0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
14300 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
14310 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
14320 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
14330 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
14340 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
14350 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
14360 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
14370 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
14380 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
14390 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
143a0 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
143b0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
143c0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
143d0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
143e0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
143f0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
14400 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
14410 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
14420 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
14430 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
14440 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
14450 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
14460 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
14470 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
14480 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
14490 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
144a0 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
144b0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
144c0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
144d0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
144e0 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
144f0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
14500 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
14510 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
14520 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
14530 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
14540 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
14550 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
14560 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
14570 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
14580 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
14590 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
145a0 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
145b0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
145c0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
145d0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
145e0 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
145f0 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
14600 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
14610 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
14620 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14630 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
14640 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
14650 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
14660 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
14670 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
14680 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
14690 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
146a0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
146b0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
146c0 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
146d0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
146e0 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
146f0 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
14700 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
14710 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
14720 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
14730 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
14740 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
14750 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
14760 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
14770 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
14780 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
14790 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
147a0 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
147b0 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
147c0 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
147d0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
147e0 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
147f0 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
14800 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
14810 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
14820 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
14830 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
14840 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
14850 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
14860 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
14870 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
14880 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
14890 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
148a0 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
148b0 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
148c0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
148d0 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
148e0 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
148f0 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
14900 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
14910 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
14920 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
14930 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
14940 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
14950 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
14960 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
14970 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
14980 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
14990 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
149a0 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
149b0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
149c0 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
149d0 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
149e0 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
149f0 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
14a00 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
14a10 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
14a20 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
14a30 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
14a40 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
14a50 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
14a60 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
14a70 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
14a80 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
14a90 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
14aa0 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
14ab0 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
14ac0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
14ad0 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
14ae0 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
14af0 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
14b00 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
14b10 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
14b20 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
14b30 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
14b40 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
14b50 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
14b60 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
14b70 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
14b80 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
14b90 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
14ba0 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
14bb0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
14bc0 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
14bd0 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
14be0 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
14bf0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
14c00 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
14c10 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
14c20 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
14c30 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
14c40 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14c50 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
14c60 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
14c70 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
14c80 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
14c90 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
14ca0 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
14cb0 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
14cc0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
14cd0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
14ce0 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
14cf0 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
14d00 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
14d10 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
14d20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
14d30 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
14d40 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
14d50 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
14d60 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
14d70 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
14d80 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
14d90 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
14da0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
14db0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
14dc0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
14dd0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
14de0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
14df0 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
14e00 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
14e10 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
14e20 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
14e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
14e70 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
14e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
14e90 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
14ea0 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
14eb0 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
14ec0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
14ed0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
14ee0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
14ef0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
14f00 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
14f10 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
14f20 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
14f30 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
14f40 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
14f50 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
14f60 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
14f70 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
14f80 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
14f90 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
14fa0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
14fb0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
14fc0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
14fd0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
14fe0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
14ff0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
15000 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
15010 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
15020 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
15030 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
15040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15080 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
15090 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
150a0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
150b0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
150c0 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
150d0 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
150e0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
150f0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
15100 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
15110 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
15120 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
15130 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
15160 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
15170 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
15180 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
15190 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
151a0 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
151d0 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
151e0 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
151f0 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
15200 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
15210 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
15220 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
15230 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
15260 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
15270 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
15280 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
152a0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
152b0 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
152c0 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
152d0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
152e0 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
152f0 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
15300 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
15310 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
15320 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
15330 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
15340 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
15350 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
15380 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
15390 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
153a0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
153b0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
153c0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
153d0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
153e0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
153f0 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
15400 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
15410 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
15420 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
15430 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
15440 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
15450 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
15460 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
15470 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
15480 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
15490 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
154a0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
154b0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
154c0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
154d0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
154e0 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63  es in ON/USING c
154f0 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a  lause of outer j
15500 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
15510 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
15520 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
15530 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
15540 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
15550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
15560 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30  esolved  0x00000
15570 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65  4 /* IDs have be
15580 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
15590 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
155a0 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30  e EP_Error     0
155b0 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65  x000008 /* Expre
155c0 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
155d0 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
155e0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
155f0 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
15600 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
15610 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
15620 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
15630 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
15640 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
15650 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
15660 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
15670 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
15680 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
15690 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
156a0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
156b0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
156c0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
156d0 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
156e0 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
156f0 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
15700 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
15710 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
15720 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
15730 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
15740 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
15750 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
15760 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
15770 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
15780 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
15790 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
157a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
157b0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
157c0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
157d0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
157e0 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
157f0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
15800 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
15810 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
15820 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
15830 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
15840 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
15850 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
15860 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
15870 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
15880 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
15890 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
158a0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
158b0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
158c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
158d0 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
158e0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
158f0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
15900 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
15910 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
15920 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
15930 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
15940 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
15950 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
15960 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
15970 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
15980 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
15990 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
159a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
159b0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
159c0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
159d0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
159e0 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
159f0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
15a00 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
15a10 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
15a20 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
15a30 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
15a40 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
15a50 2a 20 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49  * Node is a SQLI
15a60 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
15a70 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
15a80 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
15a90 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
15aa0 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
15ab0 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
15ac0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
15ad0 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
15ae0 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
15af0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
15b00 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
15b10 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69  ./*.** Combinati
15b20 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f  ons of two or mo
15b30 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f  re EP_* flags.*/
15b40 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
15b50 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
15b60 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f  e|EP_Subquery) /
15b70 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65 73  * Propagate thes
15b80 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20 2a  e bits up tree *
15b90 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
15ba0 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
15bb0 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
15bc0 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
15bd0 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
15be0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
15bf0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
15c00 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
15c10 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
15c20 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
15c30 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
15c40 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
15c50 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
15c60 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
15c70 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
15c80 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
15c90 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
15ca0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15cb0 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
15cc0 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
15cd0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
15ce0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
15cf0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
15d00 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
15d10 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
15d20 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
15d30 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
15d40 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
15d50 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
15d60 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
15d70 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
15d80 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
15d90 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
15da0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
15db0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
15dc0 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
15dd0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
15de0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
15df0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
15e00 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
15e10 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
15e20 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
15e30 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
15e40 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
15e50 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15e60 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
15e70 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
15e80 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
15e90 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
15ea0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15eb0 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
15ec0 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
15ed0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
15ee0 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
15ef0 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
15f00 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
15f10 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
15f20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
15f30 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
15f40 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
15f50 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
15f60 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
15f70 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
15f80 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
15f90 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
15fa0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
15fb0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
15fc0 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
15fd0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
15fe0 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
15ff0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
16000 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
16010 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
16020 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
16030 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
16040 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
16050 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
16060 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
16070 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
16080 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
16090 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
160a0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
160b0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
160c0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
160d0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
160e0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
160f0 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
16100 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
16110 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
16120 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
16130 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
16140 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
16150 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
16160 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
16170 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
16180 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
16190 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
161a0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
161b0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
161c0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
161d0 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
161e0 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
161f0 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
16200 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
16210 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
16220 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
16230 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
16240 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
16250 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
16260 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
16270 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
16280 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
16290 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
162a0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
162b0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
162c0 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
162d0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
162e0 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
162f0 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
16300 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
16310 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
16320 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
16330 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
16340 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
16350 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
16360 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
16370 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
16380 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
16390 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
163a0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
163b0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
163c0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
163d0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
163e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
163f0 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
16400 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
16410 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
16420 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
16430 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
16440 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
16450 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
16460 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
16470 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
16480 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
16490 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
164a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
164b0 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
164c0 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
164d0 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
164e0 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
164f0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
16500 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
16510 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
16520 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
16530 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
16540 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
16550 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
16560 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
16570 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
16580 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
16590 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
165a0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
165b0 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
165c0 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
165d0 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
165e0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
165f0 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
16600 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
16610 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
16620 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16630 20 62 44 65 66 69 6e 65 64 53 4f 20 3a 31 3b 20   bDefinedSO :1; 
16640 2f 2a 20 54 72 75 65 20 69 66 20 65 69 74 68 65  /* True if eithe
16650 72 20 44 45 53 43 20 6f 72 20 41 53 43 20 6b 65  r DESC or ASC ke
16660 79 77 6f 72 64 73 20 70 72 65 73 65 6e 74 20 2a  ywords present *
16670 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
16680 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
16690 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
166a0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
166b0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
166c0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
166d0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
166e0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
166f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16700 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
16710 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
16720 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
16730 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
16740 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
16750 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
16760 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
16770 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
16780 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
16790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
167a0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
167b0 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
167c0 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
167d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
167e0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
167f0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
16800 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
16810 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
16820 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
16830 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
16840 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
16850 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
16860 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
16870 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16880 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
16890 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
168a0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
168b0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
168c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
168d0 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
168e0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
168f0 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
16900 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
16910 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
16920 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
16930 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16940 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16950 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16960 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
16970 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
16980 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
16990 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
169a0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
169b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
169c0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
169d0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
169e0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
169f0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
16a00 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
16a10 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
16a20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16a30 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16a40 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16a50 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16a60 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
16a70 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
16a80 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
16a90 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
16aa0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
16ab0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16ac0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16ad0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16ae0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16af0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16b00 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16b10 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16b20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16b30 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16b40 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16b50 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16b60 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
16b70 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
16b80 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
16b90 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16ba0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16bb0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16bc0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16bd0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16be0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16bf0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16c00 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16c10 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16c20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16c30 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16c40 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16c50 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16c60 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
16c70 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
16c80 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
16c90 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
16ca0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16cb0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16cc0 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16cd0 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16ce0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16cf0 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16d00 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16d10 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16d20 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16d30 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16d40 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16d50 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16d60 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16d70 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16d80 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16d90 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16da0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16db0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16dc0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16dd0 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16de0 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16df0 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16e00 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16e10 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16e20 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16e30 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16e40 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
16e50 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16e60 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16e70 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
16e80 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
16e90 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
16ea0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16eb0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16ec0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16ed0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16ee0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16ef0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16f00 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16f10 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16f20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16f30 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16f40 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
16f50 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16f60 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
16f70 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
16f80 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
16f90 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
16fa0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16fb0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16fc0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16fd0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16fe0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16ff0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
17000 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
17010 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
17020 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
17030 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
17040 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
17050 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
17060 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
17070 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
17080 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
17090 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
170a0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
170b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
170c0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
170d0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
170e0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
170f0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
17100 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
17110 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
17120 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
17130 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
17140 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
17150 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
17160 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
17170 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
17180 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
17190 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
171a0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
171b0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
171c0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
171d0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
171e0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
171f0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
17200 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
17210 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
17220 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
17230 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
17240 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
17250 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
17260 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
17270 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
17280 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
17290 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
172a0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
172b0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
172c0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
172d0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
172e0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
172f0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
17300 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
17310 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
17320 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
17330 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
17340 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
17350 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
17360 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
17370 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17380 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
17390 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
173a0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
173b0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
173c0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
173d0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
173e0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
173f0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17400 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
17410 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
17420 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
17430 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17440 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
17450 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
17460 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
17470 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
17480 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
17490 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
174a0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
174b0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
174c0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
174d0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
174e0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
174f0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
17500 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
17510 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
17520 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
17530 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
17540 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
17550 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
17560 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
17570 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
17580 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
17590 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
175a0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
175b0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
175c0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
175d0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
175e0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
175f0 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
17600 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
17610 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
17620 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
17630 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
17640 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
17650 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
17660 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
17670 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
17680 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
17690 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
176a0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
176b0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
176c0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
176d0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
176e0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
176f0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
17700 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
17710 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
17720 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
17730 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
17740 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
17750 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
17760 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
17770 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
17780 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
17790 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
177a0 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
177b0 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
177c0 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
177d0 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
177e0 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
177f0 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
17800 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
17810 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
17820 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
17830 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
17840 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
17850 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
17860 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
17870 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
17880 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
17890 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
178a0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
178b0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
178c0 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
178d0 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
178e0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
178f0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
17900 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
17910 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
17920 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
17930 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
17940 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
17950 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
17960 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
17970 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
17980 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
17990 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
179a0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
179b0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
179c0 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
179d0 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
179f0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
17a00 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
17a10 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
17a20 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
17a30 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
17a40 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
17a50 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
17a60 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
17a70 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
17a80 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
17a90 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
17aa0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
17ab0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
17ac0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
17ad0 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
17ae0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
17af0 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
17b00 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
17b10 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
17b20 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17b30 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
17b40 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
17b50 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
17b60 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
17b70 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
17b80 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
17b90 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
17ba0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
17bb0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
17bc0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
17bd0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
17be0 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
17bf0 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
17c00 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
17c10 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
17c20 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
17c30 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
17c40 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
17c50 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
17c60 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
17c70 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
17c80 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
17c90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
17ca0 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
17cb0 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
17cc0 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
17cd0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
17ce0 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
17cf0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
17d00 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
17d10 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
17d20 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
17d30 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
17d40 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
17d50 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
17d60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17d70 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
17d80 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
17d90 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
17da0 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
17db0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17dc0 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
17dd0 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
17de0 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
17df0 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
17e00 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
17e10 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
17e20 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
17e30 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
17e40 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
17e50 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
17e60 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
17e70 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
17e80 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
17e90 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
17ea0 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
17eb0 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
17ec0 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
17ed0 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
17ee0 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
17ef0 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45  HERE_NO_AUTOINDE
17f00 58 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20  X     0x0080 /* 
17f10 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74  Disallow automat
17f20 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
17f30 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
17f40 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
17f50 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
17f60 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
17f70 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
17f80 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
17f90 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
17fa0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
17fb0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
17fc0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
17fd0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
17fe0 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
17ff0 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
18000 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
18010 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
18020 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
18030 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
18040 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
18050 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
18060 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
18070 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
18080 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
18090 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
180a0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
180b0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
180c0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
180d0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
180e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
180f0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
18100 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
18110 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
18120 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18130 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
18140 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
18150 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
18160 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
18170 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
18180 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
18190 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
181a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
181b0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
181c0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
181d0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
181e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
181f0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
18200 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
18210 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
18220 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
18230 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
18240 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
18250 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
18260 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
18270 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
18280 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
18290 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
182a0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
182b0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
182c0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
182d0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
182e0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
182f0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
18300 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
18310 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
18320 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
18330 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
18340 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
18350 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
18360 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
18370 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
18380 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
18390 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
183a0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
183b0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
183c0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
183d0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
183e0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
183f0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
18400 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
18410 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
18420 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
18430 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
18440 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
18450 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
18460 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
18470 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
18480 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
18490 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
184a0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
184b0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
184c0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
184d0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
184e0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
184f0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
18500 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
18510 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
18520 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
18530 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
18540 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
18550 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
18560 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
18570 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
18580 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
18590 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
185a0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
185b0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
185c0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
185d0 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
185e0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
185f0 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
18600 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
18610 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
18620 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
18630 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
18640 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
18650 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
18660 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
18670 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
18680 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
18690 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
186a0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
186b0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
186c0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
186d0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
186e0 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
186f0 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
18700 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
18710 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
18720 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
18730 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
18740 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
18750 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
18760 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
18770 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
18780 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
18790 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
187a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
187b0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
187c0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
187d0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
187e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
187f0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
18800 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
18810 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
18820 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
18830 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
18840 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
18850 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
18860 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
18870 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
18880 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
18890 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
188a0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ield..**.** Note
188b0 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  :  NC_MinMaxAgg 
188c0 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61  must have the sa
188d0 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d  me value as SF_M
188e0 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20  inMaxAgg and.** 
188f0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
18900 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69  AX..** .*/.#defi
18910 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
18920 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
18930 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
18940 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
18950 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
18960 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20  sAgg    0x0002  
18970 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
18980 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18990 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
189a0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
189b0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
189c0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
189d0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
189e0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
189f0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
18a00 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
18a10 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
18a20 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
18a30 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
18a40 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
18a50 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69  x0010  /* True i
18a60 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
18a70 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
18a80 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
18a90 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
18aa0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
18ab0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
18ac0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
18ad0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
18ae0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
18af0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
18b00 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
18b10 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
18b20 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
18b30 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
18b40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18b50 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
18b60 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
18b70 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
18b80 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
18b90 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
18ba0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
18bb0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
18bc0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
18bd0 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
18be0 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
18bf0 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
18c00 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18c10 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
18c20 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
18c30 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
18c40 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
18c50 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
18c60 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
18c70 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
18c80 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
18c90 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
18ca0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
18cb0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
18cc0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
18cd0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
18ce0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
18cf0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
18d00 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
18d10 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
18d20 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
18d30 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
18d40 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
18d50 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
18d60 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
18d70 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
18d80 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
18d90 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18da0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
18db0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
18dc0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
18dd0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
18de0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
18df0 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
18e00 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
18e10 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
18e20 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
18e30 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
18e40 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
18e50 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
18e60 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
18e70 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
18e80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
18e90 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
18ea0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
18eb0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
18ec0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
18ed0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
18ee0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
18ef0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18f00 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
18f10 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
18f20 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
18f30 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
18f40 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
18f50 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18f60 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
18f70 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
18f80 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
18f90 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
18fa0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
18fb0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
18fc0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
18fd0 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
18fe0 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
18ff0 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
19000 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
19010 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
19020 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
19030 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
19040 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
19050 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
19060 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
19070 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
19080 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
19090 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
190a0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
190b0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
190c0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
190d0 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
190e0 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
190f0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
19100 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
19110 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
19120 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
19130 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
19140 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
19150 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
19160 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
19170 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
19180 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
19190 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
191a0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
191b0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
191c0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
191d0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
191e0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
191f0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
19200 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
19210 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
19220 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
19230 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
19240 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
19250 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
19260 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
19270 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
19280 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
19290 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
192a0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
192b0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
192c0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
192d0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
192e0 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
192f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
19300 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
19310 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
19320 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
19330 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
19340 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
19350 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
19360 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
19370 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
19380 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
19390 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
193a0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
193b0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
193c0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
193d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
193e0 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
193f0 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
19400 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
19410 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
19420 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  _All            
19430 20 30 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c   0x0002  /* Incl
19440 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79  udes the ALL key
19450 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
19460 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
19470 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64     0x0004  /* Id
19480 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
19490 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
194a0 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
194b0 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
194c0 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  8  /* Contains a
194d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
194e0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
194f0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
19500 20 30 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73   0x0010  /* Uses
19510 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
19520 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
19530 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
19540 20 20 20 20 20 20 20 20 30 78 30 30 32 30 20 20          0x0020  
19550 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
19560 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
19570 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
19580 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
19590 6f 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a  o     0x0040  /*
195a0 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
195b0 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
195c0 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
195d0 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
195e0 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61     0x0080  /* Pa
195f0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
19600 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
19610 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
19620 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20       0x0100  /* 
19630 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
19640 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
19650 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
19660 74 69 56 61 6c 75 65 20 20 20 20 20 20 30 78 30  tiValue      0x0
19670 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  200  /* Single V
19680 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
19690 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
196a0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
196b0 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34  edFrom      0x04
196c0 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
196d0 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
196e0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
196f0 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
19700 6e 76 65 72 74 20 20 20 20 30 78 30 38 30 30 20  nvert    0x0800 
19710 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
19720 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
19730 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
19740 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
19750 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20  gg       0x1000 
19760 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
19770 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
19780 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
19790 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
197a0 20 20 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a        0x2000  /*
197b0 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
197c0 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
197d0 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
197e0 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
197f0 20 20 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20       0x4000  /* 
19800 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
19810 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
19820 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  ry() */.../*.** 
19830 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
19840 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
19850 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
19860 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
19870 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
19880 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
19890 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
198a0 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
198b0 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
198c0 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
198d0 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
198e0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
198f0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
19900 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
19910 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
19920 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
19930 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
19940 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
19950 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
19960 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
19970 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
19980 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
19990 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
199a0 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
199b0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
199c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
199d0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
199e0 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
19a10 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19a20 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
19a30 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
19a40 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
19a50 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
19a80 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
19a90 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
19aa0 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
19ab0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19ac0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
19ad0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
19ae0 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
19af0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
19b00 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
19b10 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
19b20 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
19b30 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
19b40 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
19b50 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
19b60 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
19b70 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
19b80 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
19b90 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
19bc0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
19bd0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
19be0 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
19bf0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
19c00 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
19c10 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
19c20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19c30 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
19c40 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
19c50 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
19c60 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
19c80 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
19c90 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
19ca0 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
19cb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19cc0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
19cd0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
19ce0 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
19cf0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
19d00 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
19d10 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
19d20 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
19d30 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
19d40 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
19d50 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
19d60 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
19d70 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
19d80 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
19db0 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
19dc0 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
19dd0 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
19de0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
19df0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
19e00 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
19e10 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
19e20 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
19e30 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
19e40 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19e50 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
19e60 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19e80 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
19e90 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
19ea0 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
19eb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19ec0 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
19ed0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
19ee0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
19ef0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
19f00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19f10 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
19f20 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
19f30 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
19f60 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
19f70 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
19f80 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
19f90 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
19fa0 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
19fb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19fc0 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
19fd0 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
19fe0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
19ff0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1a010 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1a020 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1a030 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1a040 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1a060 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1a070 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1a080 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1a090 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1a0a0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1a0b0 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1a0c0 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1a0d0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a0e0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1a0f0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1a100 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1a110 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1a120 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1a130 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1a140 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1a150 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1a180 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1a190 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1a1c0 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1a1d0 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1a1e0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1a1f0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1a200 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1a210 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1a220 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1a230 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1a240 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1a250 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1a280 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a290 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1a2a0 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1a2c0 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1a2d0 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1a2e0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1a2f0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1a300 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1a310 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1a320 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1a330 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1a340 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1a350 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1a360 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1a370 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1a380 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a390 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1a3a0 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1a3b0 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1a3c0 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1a3d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a3e0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1a3f0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1a400 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1a410 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1a420 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1a430 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1a440 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a460 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1a470 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1a480 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1a490 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a4a0 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1a4b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1a4c0 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1a4d0 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1a4e0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1a4f0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1a500 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1a510 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1a520 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1a530 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1a540 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1a550 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1a560 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1a570 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1a580 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1a590 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1a5a0 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1a5b0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1a5c0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1a5d0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1a5e0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1a5f0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1a600 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1a610 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a620 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a630 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1a640 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1a650 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1a660 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1a670 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1a680 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1a690 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1a6a0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1a6b0 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1a6c0 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1a6d0 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1a6e0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1a6f0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1a700 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1a710 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1a720 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1a730 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1a740 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1a750 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1a760 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1a770 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1a780 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1a790 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1a7a0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1a7b0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1a7c0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1a7d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a7e0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1a7f0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1a800 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1a810 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a820 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1a830 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1a840 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1a850 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1a860 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1a870 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1a880 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1a890 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1a8a0 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1a8b0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1a8c0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1a8d0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1a8e0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1a8f0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1a900 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1a910 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1a920 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1a930 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1a940 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1a950 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1a960 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1a970 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1a980 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1a990 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1a9a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1a9b0 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1a9c0 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1a9d0 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1a9e0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
1a9f0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
1aa00 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1aa10 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1aa20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1aa30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1aa40 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1aa50 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1aa60 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1aa70 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1aa80 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1aa90 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1aaa0 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1aab0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1aac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1aad0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1aae0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1aaf0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1ab00 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1ab10 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1ab20 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1ab30 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1ab40 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1ab50 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1ab60 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1ab70 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1ab80 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
1ab90 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1aba0 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1abb0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1abc0 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1abd0 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1abe0 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1abf0 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1ac00 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1ac10 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1ac20 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1ac30 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1ac40 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1ac50 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1ac60 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1ac70 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1ac80 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
1ac90 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1aca0 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1acb0 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1acc0 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1acd0 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1ace0 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1acf0 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1ad00 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1ad10 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1ad20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1ad30 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1ad40 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1ad50 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1ad60 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1ad70 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1ad80 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1ad90 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1ada0 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1adb0 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1adc0 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1add0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1ade0 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1adf0 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1ae00 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1ae10 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1ae20 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1ae30 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1ae40 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1ae50 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1ae60 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1ae70 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1ae80 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1ae90 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1aea0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1aeb0 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1aec0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1aed0 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1aee0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1aef0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1af00 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
1af10 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1af20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1af30 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1af40 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1af50 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1af60 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1af70 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1af80 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1af90 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1afa0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1afb0 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1afc0 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1afd0 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1afe0 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1aff0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1b000 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1b010 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1b020 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1b030 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1b040 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1b050 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1b060 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1b070 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1b080 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1b090 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1b0a0 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1b0b0 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1b0c0 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1b0d0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1b0e0 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1b0f0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1b100 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1b110 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1b120 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1b130 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1b140 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1b150 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1b160 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1b170 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1b180 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1b190 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1b1a0 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1b1b0 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1b1c0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
1b1d0 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1b1e0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1b1f0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1b200 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1b210 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1b220 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1b230 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1b240 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1b250 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1b260 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1b270 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1b280 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1b290 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1b2a0 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1b2b0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1b2c0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1b2d0 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1b2e0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1b2f0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1b300 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1b310 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1b320 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1b330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1b340 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1b350 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1b360 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1b370 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1b380 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1b390 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1b3a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1b3b0 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1b3c0 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1b3d0 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1b3e0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1b3f0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1b400 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1b410 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1b420 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1b430 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1b440 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1b450 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1b460 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1b470 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1b480 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1b490 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1b4a0 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1b4b0 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1b4c0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1b4d0 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1b4e0 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1b4f0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1b500 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1b510 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1b520 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1b530 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1b540 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1b550 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1b560 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1b570 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1b580 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1b590 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1b5a0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1b5b0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1b5c0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1b5d0 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1b5e0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1b5f0 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1b600 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1b610 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1b620 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1b630 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1b640 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1b650 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1b660 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1b670 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1b680 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1b690 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1b6a0 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1b6b0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1b6c0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1b6d0 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1b6e0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1b6f0 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1b700 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1b710 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1b720 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1b730 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1b740 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1b750 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1b760 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1b770 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1b780 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1b790 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1b7a0 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1b7b0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1b7c0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1b7d0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1b7e0 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1b7f0 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1b800 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1b810 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1b820 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1b830 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1b840 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1b850 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1b860 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
1b870 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1b880 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1b890 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1b8a0 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1b8b0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1b8c0 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1b8d0 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1b8e0 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1b8f0 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1b900 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1b910 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1b920 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1b930 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1b940 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1b950 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1b960 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1b970 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1b980 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1b990 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1b9a0 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1b9b0 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1b9c0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1b9d0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1b9e0 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1b9f0 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1ba00 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1ba10 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1ba20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1ba30 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1ba40 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1ba50 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1ba60 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1ba70 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1ba80 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1ba90 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1baa0 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1bab0 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1bac0 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1bad0 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1bae0 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1baf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1bb00 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1bb10 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1bb20 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1bb30 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1bb40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1bb50 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1bb60 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1bb70 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1bb80 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1bb90 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1bba0 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1bbb0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1bbc0 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1bbd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1bbe0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1bbf0 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1bc00 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1bc10 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1bc20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1bc30 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1bc40 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1bc50 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1bc60 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1bc70 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1bc80 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1bc90 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
1bca0 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f  eg[8];     /* Ho
1bcb0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1bcc0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1bcd0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  rs */.  int nRan
1bce0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1bcf0 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1bd00 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1bd10 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1bd20 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1bd30 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1bd40 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1bd50 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1bd60 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1bd70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bd80 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1bd90 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1bda0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bdb0 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1bdc0 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1bdd0 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1bde0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1bdf0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1be00 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1be10 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1be20 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20  t nSet;         
1be30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1be40 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  sets used so far
1be50 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b   */.  int nOnce;
1be60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1be70 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20  mber of OP_Once 
1be80 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20  instructions so 
1be90 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1bea0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1beb0 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1bec0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1bed0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1bee0 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1bef0 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1bf00 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1bf10 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1bf20 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1bf30 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1bf40 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1bf50 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1bf60 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1bf70 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64  */.  int iPartId
1bf80 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62  xTab;     /* Tab
1bf90 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1bfa0 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e   to a partial in
1bfb0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  dex */.  int iCa
1bfc0 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
1bfd0 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
1bfe0 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
1bff0 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
1c000 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
1c010 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
1c020 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
1c030 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
1c040 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
1c050 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
1c060 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
1c070 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
1c080 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
1c090 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
1c0a0 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
1c0b0 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
1c0c0 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
1c0d0 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
1c0e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1c0f0 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
1c100 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69  ber */.    i16 i
1c110 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
1c120 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
1c130 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
1c140 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
1c150 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
1c160 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
1c170 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
1c180 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
1c190 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
1c1a0 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
1c1b0 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
1c1c0 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
1c1d0 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
1c1e0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
1c1f0 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
1c200 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
1c210 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1c220 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
1c230 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
1c240 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
1c250 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
1c260 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
1c270 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
1c280 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1c290 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
1c2a0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1c2b0 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1c2c0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1c2d0 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1c2e0 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1c2f0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1c300 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1c310 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1c320 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1c330 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1c340 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1c350 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1c360 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1c370 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1c380 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1c390 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1c3a0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
1c3b0 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
1c3c0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
1c3d0 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
1c3e0 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
1c3f0 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1c400 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1c410 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1c420 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1c430 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1c440 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1c450 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1c460 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1c470 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1c480 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1c490 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1c4a0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1c4b0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1c4c0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1c4d0 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1c4e0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1c4f0 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1c500 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1c510 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1c520 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1c530 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1c540 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1c550 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1c560 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1c570 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1c580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c590 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1c5a0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1c5b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c5c0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1c5d0 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1c5e0 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1c5f0 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1c600 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1c610 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1c620 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1c630 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1c640 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1c650 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1c660 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1c670 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1c680 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1c690 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1c6a0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1c6b0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1c6c0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1c6d0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1c6e0 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1c6f0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1c700 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1c710 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1c720 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1c730 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1c740 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1c750 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1c760 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1c770 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1c780 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1c790 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1c7a0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1c7b0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1c7c0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1c7d0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1c7e0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1c7f0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1c800 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1c810 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1c820 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1c830 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1c840 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1c850 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1c860 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1c870 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1c880 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1c890 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1c8a0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1c8b0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1c8c0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1c8d0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1c8e0 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1c8f0 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1c900 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1c910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c950 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
1c960 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
1c970 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
1c980 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
1c990 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
1c9a0 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
1c9b0 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
1c9c0 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
1c9d0 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
1c9e0 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
1c9f0 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
1ca00 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20  (Parse,nVar) so 
1ca10 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d  the nVar field m
1ca20 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74  ust be the first
1ca30 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74   field.  ** in t
1ca40 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
1ca50 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
1ca60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1caa0 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cac0 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
1cad0 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
1cae0 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
1caf0 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20  */.  int nzVar; 
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cb10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69  * Number of avai
1cb20 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61  lable slots in a
1cb30 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  zVar[] */.  u8 i
1cb40 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
1cb50 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
1cb60 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
1cb70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
1cb80 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20    u8 bFreeWith; 
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1cba0 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f  rue if pWith sho
1cbb0 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74  uld be freed wit
1cbc0 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38  h parser */.  u8
1cbd0 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1cbe0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1cbf0 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1cc00 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1cc10 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1cc20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cc30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1cc40 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1cc50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1cc60 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1cc70 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1cc80 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1cc90 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1cca0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1ccb0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1ccc0 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1ccd0 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ccf0 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1cd00 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1cd10 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1cd20 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1cd30 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1cd40 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1cd50 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1cd60 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1cd70 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1cd80 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1cd90 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1cda0 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1cdb0 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1cdc0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1cdd0 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1cde0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1cdf0 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1ce00 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1ce10 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1ce20 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ce40 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1ce50 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1ce60 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1ce70 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1ce80 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1ce90 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1cea0 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1ceb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1cec0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1ced0 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1cee0 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1cef0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1cf00 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1cf10 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1cf20 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1cf30 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1cf40 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1cf50 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1cf60 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1cf70 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1cf80 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1cf90 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1cfa0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1cfb0 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1cfc0 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1cfd0 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1cfe0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1cff0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1d000 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1d010 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1d020 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1d030 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1d040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d050 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1d060 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1d070 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1d080 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1d090 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1d0a0 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1d0b0 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1d0c0 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1d0d0 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1d0e0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1d0f0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1d100 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1d110 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1d120 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1d130 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1d140 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1d150 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1d160 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1d170 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1d180 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1d190 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1d1a0 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1d1b0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1d1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1d1d0 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1d1e0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b  e, or NULL */.};
1d1f0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1d200 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1d210 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1d220 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1d230 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1d240 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1d250 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1d260 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1d270 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
1d280 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1d290 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1d2a0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1d2b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1d2c0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1d2d0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1d2e0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1d2f0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1d300 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1d310 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1d320 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1d330 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1d340 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1d350 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1d360 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1d370 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1d380 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1d390 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1d3a0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1d3b0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d3d0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1d3e0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1d3f0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1d400 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1d410 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1d420 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d430 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1d440 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1d450 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1d460 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1d470 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1d480 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d490 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1d4a0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1d4b0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1d4c0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1d4d0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1d4e0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1d4f0 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1d500 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1d510 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1d520 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1d530 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1d540 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1d550 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1d560 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1d570 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1d580 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1d590 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d5a0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1d5b0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1d5c0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1d5d0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1d5e0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d5f0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
1d600 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
1d610 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1d620 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
1d630 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
1d640 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
1d650 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1d660 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
1d670 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
1d680 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1d690 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1d6a0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
1d6b0 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
1d6c0 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
1d6d0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
1d6e0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
1d6f0 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
1d700 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
1d710 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
1d720 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1d730 20 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32 20    0x04    /* P2 
1d740 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1d750 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1d760 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1d770 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1d780 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d790 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1d7a0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1d7b0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1d7c0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1d7d0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1d7e0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1d7f0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1d800 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1d810 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1d820 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1d830 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d840 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1d850 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1d860 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1d870 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1d880 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1d890 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1d8a0 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1d8b0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1d8c0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1d8d0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1d8e0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1d8f0 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1d900 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1d910 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1d920 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1d930 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1d940 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1d950 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1d960 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1d970 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1d980 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1d990 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1d9a0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1d9b0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1d9c0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1d9d0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1d9e0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1d9f0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1da00 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1da10 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1da20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1da30 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1da40 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1da50 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1da60 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1da70 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1da80 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1da90 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1daa0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1dab0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1dae0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1daf0 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1db00 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1db10 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1db20 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1db50 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1db60 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1db70 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1db80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1db90 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1dba0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1dbb0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1dbc0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1dbd0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1dbe0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1dbf0 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1dc00 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1dc10 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1dc20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1dc30 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1dc40 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1dc50 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1dc80 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1dc90 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1dca0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1dcb0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1dcc0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1dcd0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1dce0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1dcf0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1dd00 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1dd10 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1dd20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1dd30 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1dd40 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1dd50 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1dd60 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1dd70 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1dd80 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1dd90 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1dda0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1ddb0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1ddc0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1ddd0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1dde0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1ddf0 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1de00 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1de10 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1de20 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1de30 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1de40 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1de50 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1de60 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1de70 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1de80 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1de90 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1dea0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1deb0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1dec0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1ded0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1dee0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1def0 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1df00 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1df10 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1df20 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1df30 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1df40 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1df50 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1df60 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1df70 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1df80 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1df90 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1dfa0 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1dfb0 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1dfc0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1dfd0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1dfe0 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1dff0 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1e000 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1e010 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1e020 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1e030 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1e040 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1e050 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1e060 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1e070 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1e080 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1e090 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1e0a0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1e0b0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1e0c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1e0d0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1e0e0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1e0f0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1e100 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1e110 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1e120 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1e130 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1e140 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1e150 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1e160 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1e170 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1e180 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1e190 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1e1a0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1e1b0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1e1c0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1e1d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1e1e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e1f0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1e200 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
1e210 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1e220 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1e230 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
1e240 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
1e250 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1e260 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
1e270 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
1e280 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1e290 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1e2a0 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
1e2b0 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
1e2c0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
1e2d0 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
1e2e0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1e2f0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
1e300 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
1e310 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
1e320 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
1e330 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
1e340 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
1e350 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
1e360 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
1e370 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
1e380 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
1e390 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1e3a0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1e3b0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1e3c0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1e3d0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1e3e0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1e3f0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1e400 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1e410 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1e420 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1e430 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1e440 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1e450 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1e460 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1e470 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
1e480 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
1e490 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1e4a0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
1e4b0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
1e4c0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1e4d0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1e4e0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1e4f0 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
1e500 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
1e510 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
1e520 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
1e530 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
1e540 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1e550 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
1e560 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
1e570 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
1e580 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
1e590 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
1e5a0 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
1e5b0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1e5c0 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1e5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1e5e0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1e5f0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1e600 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1e610 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1e620 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1e630 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1e640 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1e650 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1e660 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1e670 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1e680 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1e690 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1e6a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
1e6b0 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1e6c0 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
1e6d0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
1e6e0 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
1e6f0 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1e700 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1e710 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1e720 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1e730 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1e740 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1e750 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1e760 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1e770 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1e780 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1e790 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1e7a0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1e7b0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1e7c0 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1e7d0 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1e7e0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1e7f0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1e800 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1e810 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1e820 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1e830 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1e840 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1e850 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1e860 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1e870 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1e880 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1e890 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1e8a0 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1e8b0 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1e8c0 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1e8d0 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1e8e0 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1e8f0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1e900 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1e910 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1e920 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1e930 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1e940 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1e950 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1e960 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1e970 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1e980 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1e990 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1e9a0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1e9b0 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1e9c0 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1e9d0 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1e9e0 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1e9f0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1ea00 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1ea10 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1ea20 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1ea30 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1ea40 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1ea50 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1ea60 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1ea70 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1ea80 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1ea90 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1eaa0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1eab0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1eac0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1ead0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1eae0 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1eaf0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1eb00 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1eb10 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1eb20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1eb30 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1eb40 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1eb50 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1eb60 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1eb70 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1eb80 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1eb90 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1eba0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1ebb0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1ebc0 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1ebd0 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1ebe0 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1ebf0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1ec00 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1ec10 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1ec20 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1ec30 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1ec40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1ec50 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1ec60 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1ec70 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1ec80 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1ec90 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1eca0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1ecb0 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1ecc0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1ecd0 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
1ece0 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
1ecf0 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38  oc usage */.  u8
1ed00 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1ed10 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1ed20 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1ed30 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1ed40 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1ed50 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1ed60 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1ed70 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1ed80 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1ed90 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1eda0 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1edb0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1edc0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1edd0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1ede0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1edf0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1ee00 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1ee10 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ee20 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1ee30 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1ee40 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ee50 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1ee60 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1ee70 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1ee80 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1ee90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1eea0 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1eeb0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1eec0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1eed0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1eee0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1eef0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1ef00 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1ef10 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1ef20 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1ef30 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1ef40 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1ef50 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1ef60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1ef70 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1ef80 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1ef90 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1efa0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1efb0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1efc0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1efd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1efe0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1eff0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1f000 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1f030 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1f040 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1f050 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1f060 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f070 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1f080 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1f090 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f0b0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1f0c0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1f0d0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1f0e0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f100 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1f110 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1f120 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1f130 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1f140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1f150 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1f160 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
1f170 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
1f180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1f190 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
1f1a0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
1f1b0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1f1c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1f1d0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1f1e0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1f1f0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1f200 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1f210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1f220 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1f230 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1f240 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1f250 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1f260 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1f270 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1f280 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1f290 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1f2a0 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1f2b0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1f2c0 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1f2d0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1f2e0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1f2f0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1f300 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1f310 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1f320 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1f350 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1f360 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f380 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1f390 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1f3a0 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1f3b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1f3c0 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1f3d0 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1f3e0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
1f3f0 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
1f400 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
1f410 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
1f420 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1f430 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
1f440 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1f450 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
1f460 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
1f470 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1f480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
1f490 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
1f4a0 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1f4d0 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
1f4e0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
1f4f0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1f500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f510 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
1f520 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
1f530 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f550 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
1f560 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
1f570 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1f580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1f590 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
1f5a0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1f5b0 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
1f5e0 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
1f5f0 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
1f600 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
1f610 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
1f620 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
1f630 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
1f640 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
1f650 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
1f660 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
1f670 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
1f680 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
1f690 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f6b0 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
1f6c0 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
1f6d0 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
1f6e0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1f6f0 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
1f700 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
1f710 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
1f720 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
1f730 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
1f740 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1f770 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1f780 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
1f790 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
1f7a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f7b0 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
1f7c0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
1f7d0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
1f7e0 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
1f7f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f800 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1f810 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
1f820 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1f830 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1f860 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1f870 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1f880 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
1f890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f8a0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1f8b0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1f8c0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1f8d0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1f8e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f8f0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1f900 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
1f910 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
1f920 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
1f930 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
1f940 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1f950 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
1f960 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
1f970 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
1f980 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
1f990 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
1f9a0 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
1f9d0 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
1f9e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1f9f0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1fa00 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1fa10 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1fa20 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1fa30 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1fa40 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1fa50 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1fa60 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1fa70 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1fa80 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1fa90 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1faa0 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1fab0 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1fac0 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1fad0 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1fae0 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1faf0 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1fb00 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1fb10 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1fb20 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1fb30 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1fb40 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1fb50 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1fb90 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
1fba0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fbb0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
1fbc0 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
1fbd0 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
1fbe0 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
1fbf0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
1fc00 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
1fc10 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1fc20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fc30 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1fc40 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1fc50 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
1fc60 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
1fc70 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
1fc80 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1fc90 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
1fca0 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
1fcb0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
1fcc0 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
1fcd0 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
1fce0 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
1fcf0 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
1fd00 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
1fd10 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1fd20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
1fd30 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
1fd40 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
1fd50 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
1fd60 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
1fd70 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
1fd80 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
1fd90 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
1fda0 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
1fdb0 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
1fdc0 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
1fdd0 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
1fde0 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
1fdf0 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
1fe00 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
1fe10 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
1fe20 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
1fe30 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
1fe40 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1fe50 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
1fe60 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
1fe70 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
1fe80 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
1fe90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
1fea0 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
1feb0 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
1fec0 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
1fed0 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
1fee0 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
1fef0 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
1ff00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
1ff10 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
1ff20 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
1ff30 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
1ff40 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1ff50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1ff60 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
1ff70 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1ff80 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
1ff90 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1ffa0 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
1ffb0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
1ffc0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1ffd0 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
1ffe0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1fff0 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
20000 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20020 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
20030 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
20040 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20070 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
20080 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
200b0 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
200c0 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
200d0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200f0 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
20100 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
20110 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
20120 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
20150 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
20160 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
20190 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
201a0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
201b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201c0 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
201d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
201e0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
201f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
20210 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
20220 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
20230 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
20240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20250 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
20260 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
20270 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
20280 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
20290 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
202a0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
202b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
202c0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
202d0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
202e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
202f0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
20300 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
20310 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
20320 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
20330 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
20340 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
20350 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
20360 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
20370 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
20380 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
20390 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
203a0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
203b0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
203c0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
203d0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
203e0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
203f0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
20400 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
20410 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
20420 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
20430 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
20440 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
20450 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
20460 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
20470 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
20480 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
20490 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
204a0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
204b0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
204c0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
204d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
204e0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
204f0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
20500 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
20510 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
20520 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
20530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20540 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
20550 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
20560 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
20570 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
20580 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
20590 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
205a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
205b0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
205d0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
205e0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
205f0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
20600 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
20610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20620 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
20630 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
20640 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
20650 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
20660 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
20670 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
20680 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
20690 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
206a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
206b0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
206c0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
206d0 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20  st char *zErr;  
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
206f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
20700 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
20710 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
20720 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
20730 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
20740 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
20750 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
20760 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
20770 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
20780 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
20790 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
207a0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
207b0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
207c0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
207d0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
207e0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
207f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
20800 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
20810 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
20820 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
20830 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
20840 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
20850 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
20860 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
20870 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
20880 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
20890 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
208a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
208b0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
208c0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
208d0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
208e0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
208f0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
20900 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
20910 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
20920 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
20930 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
20960 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
20990 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
209a0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
209b0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
209c0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
20a00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
20a10 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
20a20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
20a30 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
20a40 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
20a50 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
20a60 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
20a70 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
20a80 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
20a90 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
20aa0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
20ab0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
20ac0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
20ad0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
20ae0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
20af0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
20b00 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
20b10 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
20b20 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
20b30 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
20b40 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
20b50 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
20b60 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
20b70 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
20b80 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
20b90 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
20ba0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
20bb0 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
20bc0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
20bd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20be0 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
20bf0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
20c00 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
20c10 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
20c20 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
20c30 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
20c40 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  E__).../*.** FTS
20c50 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
20c60 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
20c70 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
20c80 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
20c90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20ca0 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
20cb0 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
20cc0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
20cd0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
20ce0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
20cf0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
20d00 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
20d10 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
20d20 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
20d30 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
20d40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20d50 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
20d60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
20d70 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
20d80 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
20d90 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
20da0 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
20db0 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
20dc0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
20dd0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
20de0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
20df0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
20e00 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
20e10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
20e20 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
20e30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20e40 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
20e50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
20e60 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
20e70 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
20e80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
20e90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
20ea0 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
20eb0 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
20ec0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
20ed0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
20ee0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
20ef0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
20f00 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
20f10 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
20f20 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
20f30 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
20f40 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
20f50 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
20f60 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
20f70 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
20f80 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
20f90 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
20fa0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20fb0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20fc0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
20fd0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
20fe0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20ff0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21000 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
21010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21020 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
21030 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21040 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21050 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
21060 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
21070 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
21080 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21090 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
210a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
210b0 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
210c0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
210d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
210e0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
210f0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
21100 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
21110 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21120 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
21130 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
21140 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
21150 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
21160 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21170 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
21180 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
21190 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
211a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
211b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
211c0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
211d0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
211e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
211f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
21200 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
21210 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
21220 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21230 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
21240 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
21250 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21260 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
21270 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
21280 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
21290 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
212a0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
212b0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
212c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
212d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
212e0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
212f0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
21300 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
21310 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
21320 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
21330 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
21340 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
21350 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
21360 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
21370 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
21380 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
21390 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
213a0 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
213b0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
213c0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
213d0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
213e0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
213f0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
21400 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
21410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
21420 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
21430 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
21440 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
21450 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
21460 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21470 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
21480 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
21490 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
214a0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
214b0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
214c0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
214d0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
214e0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
214f0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
21500 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21510 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
21520 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
21530 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
21540 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
21550 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
21560 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
21570 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
21580 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
21590 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
215a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
215b0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
215c0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
215d0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
215e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
215f0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
21600 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
21610 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
21620 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
21630 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
21640 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
21650 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
21660 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
21670 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
21680 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
21690 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
216a0 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
216b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
216c0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
216d0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
216e0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
216f0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
21700 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
21710 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
21720 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
21730 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
21740 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
21750 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
21760 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
21770 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
21780 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
21790 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
217a0 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
217b0 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
217c0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
217d0 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
217e0 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
217f0 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
21800 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
21810 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
21820 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
21830 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
21840 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
21850 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
21860 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
21870 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
21880 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
21890 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
218a0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
218b0 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
218c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
218d0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
218e0 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
218f0 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
21900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
21910 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
21920 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
21930 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
21940 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
21950 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
21960 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
21970 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21980 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
21990 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
219a0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
219b0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
219c0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
219d0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
219e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
219f0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
21a00 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
21a10 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
21a20 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
21a30 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
21a40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21a50 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
21a60 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
21a70 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
21a80 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
21a90 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
21aa0 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
21ab0 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
21ac0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
21ad0 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
21ae0 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
21af0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
21b00 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
21b10 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
21b20 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
21b30 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
21b40 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
21b50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
21b60 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
21b70 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
21b80 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
21b90 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
21ba0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
21bb0 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
21bc0 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
21bd0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21be0 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
21bf0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
21c00 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
21c10 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a  t(int, int);../*
21c20 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
21c30 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
21c40 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
21c50 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
21c60 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
21c70 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
21c80 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
21c90 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
21ca0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
21cb0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
21cc0 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
21cd0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
21ce0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
21cf0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
21d00 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
21d10 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
21d20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
21d30 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
21d40 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
21d50 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
21d60 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
21d70 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
21d80 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
21d90 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
21da0 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
21db0 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
21dc0 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
21dd0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
21de0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
21df0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
21e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21e10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
21e20 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
21e30 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
21e40 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
21e50 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
21e60 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
21e70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21e80 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
21e90 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
21ea0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
21eb0 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
21ec0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
21ed0 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
21ee0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
21ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
21f00 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
21f10 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
21f20 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
21f30 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
21f40 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21f50 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
21f60 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
21f70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21f80 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
21f90 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
21fa0 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
21fb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
21fc0 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
21fd0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
21fe0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
21ff0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
22000 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22010 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
22020 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
22030 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
22040 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
22050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
22060 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
22070 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
22080 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
22090 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
220a0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
220b0 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
220c0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
220d0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
220e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
220f0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
22100 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
22110 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
22120 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
22130 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
22140 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
22150 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
22160 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
22170 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
22180 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
22190 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
221a0 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
221b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
221c0 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
221d0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
221e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
221f0 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
22200 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
22210 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
22220 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
22230 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
22240 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
22250 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22260 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
22270 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
22280 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
22290 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
222a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
222b0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
222c0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
222d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
222e0 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
222f0 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
22300 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
22310 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
22320 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
22330 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
22340 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
22350 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
22360 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22370 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
22380 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
22390 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
223a0 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
223b0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
223c0 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
223d0 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
223e0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
223f0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
22400 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
22410 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
22420 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22430 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
22440 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
22450 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
22460 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
22470 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
22480 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
22490 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
224a0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
224b0 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
224c0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
224d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
224e0 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
224f0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
22500 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
22510 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
22520 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
22530 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22540 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
22550 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
22560 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
22570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22580 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
22590 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
225a0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
225b0 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
225c0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
225d0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
225e0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
225f0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
22600 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
22610 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
22620 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
22630 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
22640 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22650 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
22660 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
22670 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
22680 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
22690 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
226a0 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
226b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
226c0 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
226d0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
226e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
226f0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
22700 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22710 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
22720 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
22730 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
22740 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
22750 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
22760 65 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  e*);.Table *sqli
22770 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
22780 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
22790 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
227a0 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
227b0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
227c0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
227d0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
227e0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
227f0 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
22800 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
22810 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
22820 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
22830 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
22840 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
22850 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
22860 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
22870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22880 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
22890 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
228a0 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
228b0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
228c0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
228d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
228e0 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
228f0 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
22900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22910 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
22920 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
22930 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
22940 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
22950 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
22960 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
22970 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
22980 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22990 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
229a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
229b0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
229c0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
229d0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
229e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
229f0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22a10 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
22a20 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
22a30 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
22a40 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
22a50 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
22a60 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
22a70 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
22a80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
22a90 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
22aa0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22ab0 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
22ac0 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
22ad0 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
22ae0 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
22af0 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
22b00 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
22b10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22b20 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
22b30 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
22b40 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
22b50 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
22b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
22b70 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
22b80 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
22b90 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
22ba0 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
22bb0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
22bc0 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
22bd0 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
22be0 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
22bf0 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
22c00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
22c10 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71  LTIN_TEST.int sq
22c20 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
22c30 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
22c40 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
22c50 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
22c60 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  nit(sqlite3*, vo
22c70 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e  id*, unsigned in
22c80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22c90 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53  RowSetClear(RowS
22ca0 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  et*);.void sqlit
22cb0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
22cc0 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
22cd0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
22ce0 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74  est(RowSet*, int
22cf0 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
22d00 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
22d10 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
22d20 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
22d30 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
22d40 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
22d50 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a  *,Token*,Select*
22d60 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
22d70 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22d80 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
22d90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22da0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
22db0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
22dc0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
22dd0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
22de0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22df0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
22e00 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
22e10 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
22e20 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
22e30 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
22e40 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
22e50 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
22e60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
22e70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
22e80 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
22e90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22ea0 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
22eb0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22ec0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22ed0 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
22ee0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
22ef0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
22f00 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
22f10 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
22f20 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
22f30 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
22f40 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
22f50 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22f60 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
22f70 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
22f80 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
22f90 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
22fa0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22fb0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
22fc0 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
22fd0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
22fe0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22ff0 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
23000 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
23010 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
23020 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
23030 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
23040 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
23050 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
23060 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
23070 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
23080 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
23090 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
230a0 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
230b0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
230c0 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
230d0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
230e0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
230f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
23100 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
23110 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
23120 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
23130 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
23140 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
23150 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23160 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
23170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
231a0 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
231b0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
231c0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
231d0 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
231e0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
231f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23200 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
23210 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23220 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
23230 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
23240 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
23250 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
23260 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
23270 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
23280 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
23290 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
232a0 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
232b0 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
232c0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
232d0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
232e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
232f0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
23300 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
23310 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
23320 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
23330 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
23340 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
23350 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
23360 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
23370 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
23380 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23390 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
233a0 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
233d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
233e0 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
233f0 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
23400 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
23410 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
23420 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
23430 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
23440 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
23450 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
23460 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
23470 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
234a0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
234b0 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
234c0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
234d0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
234e0 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
234f0 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
23500 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
23510 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
23520 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
23530 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
23540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
23550 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
23560 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
23570 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
23580 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
23590 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
235a0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
235b0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
235c0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
235d0 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
235e0 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
235f0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
23600 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
23610 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
23620 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23630 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
23640 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
23650 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
23660 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
23670 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
23680 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
23690 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
236a0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
236b0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
236c0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
236d0 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
236e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
236f0 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
23700 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
23710 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
23720 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
23730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
23740 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
23750 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
23760 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
23770 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
23780 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
23790 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
237a0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
237b0 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
237c0 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
237d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
237e0 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
237f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
23800 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
23810 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
23820 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
23830 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
23840 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
23850 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
23860 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
23870 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
23880 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
23890 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
238a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
238b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
238c0 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
238d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
238e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
238f0 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
23900 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23910 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23920 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
23930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23940 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
23950 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23960 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65  3ExprCacheRemove
23970 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
23980 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23990 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50  ExprCacheClear(P
239a0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
239b0 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66  ite3ExprCacheAff
239c0 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73  inityChange(Pars
239d0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
239e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
239f0 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
23a00 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23a10 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
23a20 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
23a30 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
23a40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
23a50 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
23a60 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  Expr*, int, u8);
23a70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23a80 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
23a90 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
23aa0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
23ab0 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
23ac0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
23ad0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23ae0 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
23af0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23b00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23b10 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
23b20 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
23b30 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
23b40 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
23b50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
23b60 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
23b70 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
23b80 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
23b90 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
23ba0 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
23bb0 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f  tant terms */.vo
23bc0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
23bd0 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
23be0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
23bf0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
23c00 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
23c10 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
23c20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23c30 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
23c40 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
23c50 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
23c60 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
23c70 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23c80 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
23c90 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
23ca0 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
23cb0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f  e*,int isView,co
23cc0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
23cd0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
23ce0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
23cf0 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e  leItem(Parse*,in
23d00 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20  t isView,struct 
23d10 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
23d20 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
23d30 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
23d40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
23d50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23d60 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
23d70 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
23d80 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
23d90 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
23da0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
23db0 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
23dc0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
23dd0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23de0 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b  3Vacuum(Parse*);
23df0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
23e00 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
23e10 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73  lite3*);.char *s
23e20 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
23e30 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
23e40 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
23e50 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78  e3ExprCompare(Ex
23e60 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
23e70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23e80 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
23e90 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
23ea0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
23eb0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
23ec0 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  xpr(Expr*, Expr*
23ed0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23ee0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
23ef0 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
23f00 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
23f10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23f20 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
23f30 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
23f40 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23f50 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
23f60 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
23f70 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
23f80 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
23f90 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
23fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
23fb0 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c  IN_TEST.void sql
23fc0 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
23fd0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
23fe0 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
23ff0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
24000 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
24010 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
24020 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
24030 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
24040 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
24050 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24060 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
24070 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
24080 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
24090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
240a0 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
240b0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
240c0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
240d0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
240e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
240f0 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
24100 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
24110 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
24120 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
24130 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
24140 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
24150 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
24160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
24170 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
24180 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
24190 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
241a0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
241b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
241c0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
241d0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
241e0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
241f0 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
24200 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
24210 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
24220 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
24230 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
24240 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
24250 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
24260 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
24270 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
24280 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24290 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
242a0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
242b0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
242c0 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
242d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
242e0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
242f0 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
24300 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
24310 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
24320 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76  i16,u8,u8,u8);.v
24330 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
24340 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
24350 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
24360 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
24370 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
24380 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
24390 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
243a0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
243b0 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
243c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
243d0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
243e0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
243f0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
24400 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
24410 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
24420 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
24430 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
24460 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
24470 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
24480 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
24490 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
244a0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
244b0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
244c0 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
244d0 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
244e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
244f0 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
24500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
24510 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
24520 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
24530 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24540 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
24550 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
24560 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
24570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
24580 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
24590 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
245a0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
245b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
245c0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
245d0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
245e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
245f0 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
24600 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
24610 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
24620 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
24630 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
24640 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
24650 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
24660 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
24670 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
24680 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
24690 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
246a0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
246b0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
246c0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
246d0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
246e0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
246f0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
24700 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
24710 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
24720 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
24730 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
24740 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
24750 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24760 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
24770 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
24780 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
24790 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
247a0 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
247b0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
247c0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
247d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
247e0 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
247f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
24800 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
24810 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
24820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
24830 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
24840 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
24850 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
24860 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
24870 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
24880 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
24890 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
248a0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
248b0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
248c0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
248d0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
248e0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
248f0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
24900 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
24910 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24920 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
24930 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
24940 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
24950 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
24960 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
24970 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24980 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
24990 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
249a0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
249b0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
249c0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
249d0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249f0 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
24a00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24a10 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
24a20 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
24a30 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
24a40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
24a50 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
24a60 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
24a70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
24a80 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
24a90 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
24aa0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
24ab0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
24ac0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
24ad0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
24ae0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
24af0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
24b00 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
24b10 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
24b20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
24b30 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
24b40 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
24b50 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
24b60 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
24b90 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
24ba0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
24bb0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
24bc0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
24bd0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
24be0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
24bf0 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
24c00 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
24c10 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
24c20 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
24c30 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
24c40 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
24c50 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
24c60 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
24c70 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
24c80 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
24c90 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
24ca0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
24cb0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
24cc0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
24cd0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
24ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d00 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
24d10 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
24d20 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24d30 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
24d40 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
24d50 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
24d60 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
24d70 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
24d80 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
24d90 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
24da0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
24db0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
24dc0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
24dd0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
24de0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24df0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
24e00 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
24e10 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
24e20 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
24e30 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
24e40 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
24e50 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
24e60 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
24e70 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
24e80 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
24e90 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
24ea0 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
24eb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24ec0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
24ed0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
24ee0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
24ef0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
24f00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
24f10 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
24f20 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
24f30 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24f40 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
24f50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24f60 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
24f70 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
24f80 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
24f90 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
24fa0 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
24fb0 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
24fc0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
24fd0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
24fe0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
24ff0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
25000 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
25010 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
25020 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
25030 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
25040 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
25050 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
25060 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
25070 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
25080 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
25090 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
250a0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
250b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
250c0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
250d0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
250e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
250f0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
25100 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
25110 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
25120 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
25130 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
25140 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
25150 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
25160 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25170 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25180 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
25190 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
251a0 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
251b0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
251c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
251d0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
251e0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
251f0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
25200 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
25210 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
25220 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
25230 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25240 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
25250 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
25260 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
25270 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
25280 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
25290 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
252a0 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
252b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
252c0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
252d0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
252e0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
252f0 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
25300 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
25310 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25320 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
25330 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
25340 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
25350 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
25360 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
25370 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
25380 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
25390 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
253a0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
253b0 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
253c0 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
253d0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
253e0 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
253f0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
25400 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
25410 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
25420 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
25430 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
25440 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
25450 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
25460 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
25470 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
25480 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
25490 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
254a0 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
254b0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
254c0 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
254d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
254e0 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
254f0 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
25500 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
25510 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
25520 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
25530 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
25540 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
25550 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
25560 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
25570 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
25580 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
25590 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
255a0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
255b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
255c0 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
255d0 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
255e0 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
255f0 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65  endif.u64 sqlite
25600 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
25610 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  Est);../*.** Rou
25620 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
25630 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
25640 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
25650 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
25660 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
25670 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
25680 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
25690 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
256a0 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
256b0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
256c0 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
256d0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
256e0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
256f0 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
25700 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
25710 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
25720 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
25730 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
25740 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
25750 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
25760 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
25770 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
25780 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
25790 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
257a0 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
257b0 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
257c0 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
257d0 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
257e0 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
257f0 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
25800 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
25810 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
25820 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
25830 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
25840 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
25850 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
25860 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
25870 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
25880 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
25890 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
258a0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
258b0 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
258c0 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
258d0 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
258e0 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
258f0 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
25900 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
25910 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
25920 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
25930 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
25940 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
25950 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
25960 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
25970 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
25980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
25990 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
259a0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
259b0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
259c0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
259d0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
259e0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
259f0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
25a00 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
25a10 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
25a20 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
25a30 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
25a40 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
25a50 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
25a60 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
25a70 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
25a80 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
25a90 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
25aa0 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
25ab0 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73  e3ErrorWithMsg(s
25ac0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
25ad0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
25ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
25af0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
25b00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
25b10 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
25b20 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
25b30 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
25b40 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
25b50 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
25b60 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
25b70 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
25b80 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
25b90 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
25ba0 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
25bb0 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
25bc0 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
25bd0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
25be0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
25bf0 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
25c00 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
25c10 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
25c20 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25c30 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
25c40 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
25c50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
25c60 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
25c70 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
25c80 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
25c90 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
25ca0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
25cb0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
25cc0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
25cd0 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
25ce0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
25cf0 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
25d00 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
25d10 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20  , const Token*, 
25d20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
25d30 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
25d40 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
25d50 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
25d60 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25d70 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
25d80 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25d90 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
25da0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
25db0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25dc0 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
25dd0 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
25de0 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
25df0 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
25e00 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
25e10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
25e20 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
25e30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
25e40 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
25e50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
25e60 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
25e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
25e80 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
25e90 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25ea0 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
25eb0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
25ec0 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
25ed0 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
25ee0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
25ef0 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
25f00 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
25f10 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
25f20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
25f30 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
25f40 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
25f50 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
25f60 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
25f70 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
25f80 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
25f90 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
25fa0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
25fb0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
25fc0 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fe0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
25ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26000 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
26010 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
26020 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
26030 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
26040 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
26050 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
26060 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
26070 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
26080 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
26090 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
260a0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
260b0 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
260c0 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
260d0 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
260e0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
260f0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
26100 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
26110 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
26120 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
26130 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
26140 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
26150 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
26160 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
26170 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
26180 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
26190 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
261a0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
261b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
261c0 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
261d0 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
261e0 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
261f0 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
26200 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
26210 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
26220 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
26230 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
26240 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
26250 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
26260 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
26270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
26280 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
26290 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
262a0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
262b0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
262c0 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
262d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
262e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
262f0 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
26300 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
26310 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
26320 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
26330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
26340 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
26350 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26360 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
26370 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
26380 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
26390 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
263a0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
263b0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
263c0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
263d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
263e0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
263f0 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
26400 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
26410 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
26420 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
26430 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26440 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
26450 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
26460 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
26470 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
26480 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
26490 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
264a0 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
264b0 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
264c0 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
264d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
264e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
264f0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
26500 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
26510 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
26520 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
26530 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
26540 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
26550 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
26560 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
26570 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
26580 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
26590 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
265a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
265b0 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
265c0 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
265d0 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
265e0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
265f0 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
26600 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
26610 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
26620 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
26630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26640 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
26650 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
26660 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26670 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
26680 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
26690 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
266a0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
266b0 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
266c0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
266d0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
266e0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
266f0 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
26700 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
26710 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
26720 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
26730 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
26740 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
26750 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
26760 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
26770 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
26780 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
26790 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
267a0 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
267b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
267c0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
267d0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
267e0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
267f0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
26800 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
26810 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
26820 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
26830 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
26840 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
26850 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
26860 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
26870 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
26880 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
26890 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
268a0 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
268b0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
268c0 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
268d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
268e0 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
268f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
26900 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26910 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
26920 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
26930 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
26940 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
26950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
26960 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
26970 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
26980 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
26990 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
269a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
269b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
269c0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
269d0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
269e0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
269f0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
26a00 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
26a10 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
26a20 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
26a30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26a40 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
26a50 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
26a60 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
26a70 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
26a80 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
26a90 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
26aa0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
26ab0 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
26ac0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
26ad0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
26ae0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
26af0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
26b00 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
26b10 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
26b20 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
26b30 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
26b40 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
26b50 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
26b60 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
26b70 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
26b80 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
26b90 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
26ba0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
26bb0 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
26bc0 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
26bd0 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
26be0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26bf0 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
26c00 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
26c10 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
26c20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
26c30 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
26c40 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
26c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
26c60 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d  endChar(StrAccum
26c70 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61  *,int,char);.cha
26c80 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
26c90 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
26ca0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
26cb0 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
26cc0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
26cd0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
26ce0 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
26cf0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
26d00 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
26d10 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
26d20 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
26d30 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
26d40 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
26d50 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
26d60 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
26d70 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
26d80 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
26d90 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
26da0 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  u8 *);..#ifdef S
26db0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
26dc0 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
26dd0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
26de0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
26df0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
26e00 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61  ProbeSetValue(Pa
26e10 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61  rse*,Index*,Unpa
26e20 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70  ckedRecord**,Exp
26e30 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  r*,u8,int,int*);
26e40 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
26e50 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50  4ValueFromExpr(P
26e60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38  arse*, Expr*, u8
26e70 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
26e80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26e90 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
26ea0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
26eb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
26ec0 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a  4Column(sqlite3*
26ed0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
26ee0 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  nt, int, sqlite3
26ef0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69  _value**);.#endi
26f00 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
26f10 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
26f20 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
26f30 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
26f40 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
26f50 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b  (void*(*)(u64));
26f60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
26f70 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
26f80 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
26f90 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
26fa0 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
26fb0 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23  oken, Parse*);.#
26fc0 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58  ifdef YYTRACKMAX
26fd0 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74  STACKDEPTH.  int
26fe0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74   sqlite3ParserSt
26ff0 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a  ackPeak(void*);.
27000 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
27010 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
27020 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
27030 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27040 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
27050 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  SION.  void sqli
27060 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
27070 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  ns(sqlite3*);.#e
27080 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27090 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
270a0 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ons(X).#endif..#
270b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
270c0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
270d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61    void sqlite3Ta
270e0 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c  bleLock(Parse *,
270f0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63   int, int, u8, c
27100 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65  onst char *);.#e
27110 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27120 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76  lite3TableLock(v
27130 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66  ,w,x,y,z).#endif
27140 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
27150 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  TEST.  int sqlit
27160 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e  e3Utf8To8(unsign
27170 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  ed char*);.#endi
27180 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
27190 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
271a0 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  LE.#  define sql
271b0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29  ite3VtabClear(Y)
271c0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
271d0 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20  e3VtabSync(X,Y) 
271e0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
271f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52  ine sqlite3VtabR
27200 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65  ollback(X).#  de
27210 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
27220 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66  Commit(X).#  def
27230 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
27240 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64  nSync(db) 0.#  d
27250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27260 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66  bLock(X) .#  def
27270 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
27280 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
27290 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
272a0 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
272b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
272c0 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
272d0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
272e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
272f0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
27300 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
27310 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
27320 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
27330 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
27340 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
27350 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
27360 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
27370 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
27380 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
27390 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
273a0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
273b0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
273c0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
273d0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
273e0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
273f0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
27400 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
27410 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
27420 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
27430 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
27440 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
27450 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
27460 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
27470 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
27480 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
27490 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
274a0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
274b0 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
274c0 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
274d0 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
274e0 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
274f0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64  *, Table*);.#  d
27500 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27510 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
27520 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
27530 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
27540 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
27550 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
27560 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
27570 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
27580 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
27590 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
275a0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
275b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
275c0 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
275d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
275e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
275f0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
27600 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
27610 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
27620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
27630 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
27640 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
27650 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
27660 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
27670 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
27680 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
27690 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
276a0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
276b0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
276c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
276d0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
276e0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
276f0 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
27700 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
27710 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
27720 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
27730 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
27740 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
27750 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
27760 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
27770 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
27780 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
27790 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
277a0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
277b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
277c0 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
277d0 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
277e0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
277f0 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
27800 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
27810 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
27820 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
27830 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
27840 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
27850 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
27860 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
27870 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
27880 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
27890 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
278a0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
278b0 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
278c0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
278d0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
278e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
278f0 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
27900 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
27910 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
27920 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
27930 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
27940 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
27950 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
27960 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
27970 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
27980 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
27990 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
279a0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
279b0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
279c0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
279d0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
279e0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
279f0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
27a00 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
27a10 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
27a20 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
27a30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
27a40 74 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  t);.#endif.void 
27a50 73 71 6c 69 74 65 33 52 65 73 74 72 69 63 74 43  sqlite3RestrictC
27a60 6f 6c 75 6d 6e 4c 69 73 74 53 79 6e 74 61 78 28  olumnListSyntax(
27a70 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
27a80 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27a90 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
27aa0 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
27ab0 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
27ac0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27ad0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
27ae0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27af0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
27b00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
27b10 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
27b20 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
27b30 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
27b40 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
27b50 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
27b60 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
27b70 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
27b80 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
27b90 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
27ba0 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
27bb0 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
27bc0 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
27bd0 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
27be0 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
27bf0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
27c00 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
27c10 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
27c20 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
27c30 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
27c40 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
27c50 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
27c60 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
27c70 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
27c80 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
27c90 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
27ca0 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
27cb0 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
27cc0 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
27cd0 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
27ce0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
27cf0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
27d00 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
27d10 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
27d20 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
27d30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27d40 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
27d50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27d60 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
27d70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
27d80 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
27d90 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27da0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
27db0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
27dc0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
27dd0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
27de0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27df0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
27e00 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
27e10 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
27e20 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27e30 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
27e40 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27e50 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
27e60 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
27e70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
27e80 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
27e90 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
27ea0 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
27eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27ec0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
27ed0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27ee0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
27ef0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27f00 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
27f10 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
27f20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27f30 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
27f40 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
27f50 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
27f60 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
27f70 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
27f80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
27f90 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
27fa0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27fb0 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
27fc0 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
27fd0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
27fe0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
27ff0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
28000 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
28010 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
28020 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
28030 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
28040 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
28050 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
28060 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
28070 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
28080 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
28090 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
280a0 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
280b0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
280c0 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
280d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
280e0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
280f0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
28100 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
28110 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
28120 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
28130 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
28140 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
28150 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
28160 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
28170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
28180 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
28190 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
281a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
281b0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
281c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
281d0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
281e0 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
281f0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
28200 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
28210 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
28220 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
28230 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
28240 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
28250 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
28260 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
28270 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
28280 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
28290 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
282a0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
282b0 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
282c0 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
282d0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
282e0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
282f0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
28300 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
28310 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
28320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
28330 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
28340 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
28350 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
28360 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
28370 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
28380 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
28390 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
283a0 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
283b0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
283c0 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
283d0 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
283e0 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
283f0 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
28400 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
28410 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
28420 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
28430 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
28440 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
28450 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
28460 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
28470 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
28480 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28490 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
284a0 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
284b0 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
284c0 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
284d0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
284e0 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
284f0 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
28500 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
28510 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
28520 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
28530 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
28540 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
28550 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
28560 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
28570 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
28580 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
28590 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
285a0 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
285b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
285c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
285d0 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
285e0 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
285f0 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
28600 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
28610 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
28620 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
28630 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
28640 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
28650 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
28660 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
28670 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
28680 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
28690 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
286a0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
286b0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
286c0 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
286d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
286e0 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
286f0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
28700 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
28710 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
28720 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
28730 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
28740 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
28750 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
28760 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
28770 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
28780 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
28790 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
287a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
287b0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
287c0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
287d0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
287e0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
287f0 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
28800 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
28810 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
28820 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
28830 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
28840 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28850 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
28860 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
28870 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
28880 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
28890 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
288a0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
288b0 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
288c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
288d0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
288e0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
288f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
28900 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
28910 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
28920 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28930 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
28940 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
28950 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
28960 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
28970 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28980 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
28990 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
289a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
289b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
289c0 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
289d0 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
289e0 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
289f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
28a00 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
28a10 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
28a20 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
28a30 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
28a40 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
28a50 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
28a60 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
28a70 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
28a80 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
28a90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
28aa0 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
28ab0 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
28ac0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
28ad0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
28ae0 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
28af0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
28b00 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
28b10 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
28b20 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
28b30 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
28b40 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
28b50 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
28b60 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
28b70 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
28b80 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
28b90 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
28ba0 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
28bb0 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
28bc0 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
28bd0 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
28be0 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
28bf0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
28c00 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
28c10 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
28c20 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
28c30 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
28c40 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
28c50 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
28c60 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
28c70 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
28c80 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
28c90 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
28ca0 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
28cb0 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
28cc0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
28cd0 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
28ce0 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
28cf0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
28d00 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
28d10 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
28d20 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
28d30 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
28d40 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
28d50 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
28d60 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
28d70 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
28d80 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
28d90 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
28da0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
28db0 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
28dc0 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
28dd0 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
28de0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
28df0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28e00 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
28e10 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
28e20 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
28e30 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
28e40 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
28e50 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
28e60 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
28e70 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
28e80 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
28e90 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
28ea0 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
28eb0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
28ec0 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
28ed0 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
28ee0 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
28ef0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
28f00 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
28f10 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
28f20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28f30 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
28f40 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
28f50 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
28f60 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
28f70 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
28f80 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
28f90 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
28fa0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
28fb0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
28fc0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28fd0 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
28fe0 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
28ff0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
29000 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
29010 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
29020 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
29030 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
29040 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
29050 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
29060 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
29070 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
29080 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
29090 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
290a0 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
290b0 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
290c0 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
290d0 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
290e0 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
290f0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
29100 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
29110 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
29120 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
29130 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
29140 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
29150 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
29160 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
29170 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
29180 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
29190 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
291a0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
291b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
291c0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
291d0 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
291e0 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
291f0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
29200 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
29210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
29220 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
29230 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
29240 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
29250 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
29260 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
29270 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
29280 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
29290 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
292a0 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
292b0 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
292c0 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
292d0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
292e0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
292f0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
29300 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
29310 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
29320 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
29330 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
29340 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
29350 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
29360 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
29370 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
29380 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
29390 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
293a0 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
293b0 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
293c0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
293d0 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
293e0 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
293f0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
29400 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
29410 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65  STAT_VTAB) || de
29420 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
29430 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
29440 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c  statRegister(sql
29450 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ite3*);.#endif..
29460 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54  #endif /* _SQLIT
29470 45 49 4e 54 5f 48 5f 20 2a 2f 0a                 EINT_H_ */.