/ Hex Artifact Content
Login

Artifact 8657f11e821b15500810020f529f452113fe6532:


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 62 43 6f 6e  ag. */.  u8 bCon
9d80: 63 75 72 72 65 6e 74 3b 20 20 20 20 20 20 20 20  current;        
9d90: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
9da0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
9db0: 20 22 43 4f 4e 43 55 52 52 45 4e 54 22 20 2a 2f   "CONCURRENT" */
9dc0: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
9dd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9de0: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
9df0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
9e00: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
9e10: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
9e20: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
9e30: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
9e40: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
9e50: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
9e60: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9e70: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
9e80: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
9e90: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
9ea0: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
9eb0: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
9ec0: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
9ed0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
9ee0: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
9ef0: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
9f00: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
9f10: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
9f20: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
9f30: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
9f40: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
9f50: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
9f60: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
9f70: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
9f80: 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69    u8 isTransacti
9f90: 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  onSavepoint;    
9fa0: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f  /* True if the o
9fb0: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
9fc0: 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20  nt is a TS */.  
9fd0: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
9fe0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9ff0: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
a000: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
a010: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
a040: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
a050: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
a060: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
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 63 68 61 6e 67 65  y sqlite3_change
a0a0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
a0b0: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
a0c0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a0d0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
a0e0: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
a0f0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
a100: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
a110: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
a120: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
a130: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
a140: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
a150: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
a160: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
a170: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
a180: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
a190: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
a1a0: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
a1b0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
a1c0: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
a1f0: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
a200: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
a210: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
a220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
a230: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
a240: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
a250: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
a260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a270: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
a280: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
a290: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
a2a0: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
a2b0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
a2c0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
a2d0: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
a2e0: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
a2f0: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
a300: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
a310: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
a320: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
a330: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
a340: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
a350: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
a360: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
a370: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
a380: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
a390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a3a0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
a3b0: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
a3c0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
a3d0: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
a3e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a3f0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
a400: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
a410: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
a420: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
a430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a440: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
a450: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
a460: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
a470: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
a480: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a490: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
a4a0: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
a4b0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
a4c0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
a4d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a4e0: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
a4f0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
a500: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
a510: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
a520: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
a530: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69  handles */.  voi
a540: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
a550: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  *,const char*); 
a560: 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20         /* Trace 
a570: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a580: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
a590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a5b0: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
a5c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a5d0: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
a5e0: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
a5f0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
a600: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
a610: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
a620: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a640: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
a650: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
a660: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
a670: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a680: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a690: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
a6a0: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e  ack() */   .  in
a6b0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
a6c0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
a6d0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a6e0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a6f0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
a700: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a710: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a720: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
a730: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f  ack() */   .  vo
a740: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
a750: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
a760: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a770: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a780: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
a790: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
a7a0: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
a7b0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
a7c0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
a7d0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
a7e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a7f0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
a800: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
a810: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
a820: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
a830: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
a840: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
a850: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
a860: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
a870: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
a880: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
a890: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
a8a0: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a8b0: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a8c0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
a8d0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
a8e0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
a8f0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
a900: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
a910: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
a920: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
a930: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
a940: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
a950: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
a960: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
a970: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
a980: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
a990: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
a9a0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
a9b0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
a9c0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
a9d0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
a9e0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
a9f0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
aa00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
aa10: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
aa20: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
aa30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
aa40: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
aa50: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
aa60: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa80: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
aa90: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
aaa0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
aab0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
aac0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
aad0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
aae0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
aaf0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
ab00: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
ab10: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
ab20: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
ab30: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ab40: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
ab50: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
ab60: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
ab70: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
ab80: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
ab90: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
aba0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
abb0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
abc0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
abd0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
abe0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
abf0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
ac00: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
ac10: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
ac20: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
ac30: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
ac40: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
ac50: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ac60: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
ac70: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
ac80: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
ac90: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
aca0: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
acb0: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
acd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
ace0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
acf0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
ad00: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
ad10: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
ad20: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
ad30: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
ad40: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
ad50: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
ad60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
ad70: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
ad80: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
ad90: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
ada0: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
adb0: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
adc0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
add0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
ade0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
adf0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
ae00: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
ae10: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
ae20: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
ae30: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
ae40: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
ae50: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
ae60: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
ae70: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
ae80: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
ae90: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
aea0: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
aeb0: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
aec0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
aed0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
aee0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
aef0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
af00: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
af10: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
af20: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
af30: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
af40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
af50: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
af60: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
af70: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
af80: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
af90: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
afa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
afb0: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
afc0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
afd0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
afe0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
aff0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
b000: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
b010: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
b020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
b030: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
b040: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
b050: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
b060: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
b070: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
b080: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
b090: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
b0a0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
b0b0: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
b0c0: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
b0d0: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
b0e0: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
b0f0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
b100: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
b110: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
b120: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
b130: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
b140: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
b150: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
b160: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
b170: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
b180: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
b190: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
b1a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b1b0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b1c0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
b1d0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
b1e0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
b1f0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
b200: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
b210: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
b220: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
b230: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
b240: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
b250: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
b260: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
b270: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
b280: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
b290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
b2a0: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
b2b0: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
b2c0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
b2d0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b2e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b2f0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
b300: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
b310: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
b320: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
b330: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
b340: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
b350: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
b360: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
b370: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
b380: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
b390: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
b3a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b3b0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b3c0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
b3d0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
b3e0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
b3f0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
b400: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
b410: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
b420: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
b430: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
b440: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
b450: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
b460: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
b470: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
b480: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
b490: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
b4a0: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
b4b0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
b4c0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
b4d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b4e0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
b4f0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
b500: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
b510: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
b520: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b530: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
b540: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
b550: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
b560: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
b570: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b580: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
b590: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65  00000004  /* Use
b5a0: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
b5b0: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
b5c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
b5d0: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
b5e0: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
b5f0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
b600: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
b610: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
b620: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
b630: 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0010  /* OK to s
b640: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
b650: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b660: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
b670: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
b680: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
b690: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
b6a0: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
b6b0: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
b6c0: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
b6d0: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
b6e0: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
b6f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
b700: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
b710: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
b720: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
b730: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
b740: 20 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 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
b770: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
b780: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
b7c0: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
b7d0: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
b7e0: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
b7f0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
b800: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
b810: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
b820: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
b860: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
b870: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
b880: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
b890: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75  0000200  /* Debu
b8a0: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
b8b0: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
b8c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b8d0: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
b8e0: 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67  000400  /* Debug
b8f0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
b900: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
b910: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
b920: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
b930: 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  000800  /* OK to
b940: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
b950: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
b960: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
b970: 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30  pTrace 0x0000100
b980: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
b990: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
b9a0: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
b9b0: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
b9c0: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
b9d0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
b9e0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
b9f0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
ba00: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
ba10: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30  mmitted 0x000400
ba20: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
ba30: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
ba40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
ba50: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
ba60: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
ba70: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
ba80: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
ba90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
baa0: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
bab0: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e  00010000  /* Ign
bac0: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
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 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
baf0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
bb00: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
bb10: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
bb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bb30: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
bb40: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0040000  /* Enab
bb50: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
bb60: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
bb70: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
bb80: 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30  eys    0x0008000
bb90: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
bba0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
bbb0: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
bbc0: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
bbd0: 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ex      0x001000
bbe0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
bbf0: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
bc00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc10: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
bc20: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
bc30: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
bc40: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
bc50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
bc60: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
bc70: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
bc80: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
bc90: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bca0: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
bcb0: 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20  er  0x00800000  
bcc0: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
bcd0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
bce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
bcf0: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31  erFKs       0x01
bd00: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  000000  /* Defer
bd10: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
bd20: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
bd30: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
bd40: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
bd50: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
bd60: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
bd70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bd80: 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78  dbeEQP        0x
bd90: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  04000000  /* Deb
bda0: 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  ug EXPLAIN QUERY
bdb0: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
bdc0: 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20   SQLITE_Vacuum  
bdd0: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
bde0: 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  0  /* Currently 
bdf0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
be00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
be10: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31  llSizeCk     0x1
be20: 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0000000  /* Chec
be30: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
be40: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a  es on load */...
be50: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
be60: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
be70: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
be80: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
be90: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
bea0: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
beb0: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
bec0: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
bed0: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
bee0: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
bef0: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
bf00: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
bf10: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
bf20: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
bf30: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
bf40: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
bf50: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
bf60: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
bf70: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
bf80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bf90: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
bfa0: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
bfb0: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
bfc0: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
bfd0: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
bfe0: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
bff0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
c000: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
c010: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
c020: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
c030: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
c040: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
c050: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
c060: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
c070: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
c080: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
c090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c0a0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
c0b0: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
c0c0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
c0d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c0e0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
c0f0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
c100: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
c110: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
c120: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
c130: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
c140: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
c150: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
c160: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
c170: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
c180: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
c190: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
c1a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c1b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
c1c0: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
c1d0: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
c1e0: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
c1f0: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
c200: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
c210: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
c220: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
c230: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
c240: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
c250: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
c260: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
c270: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
c280: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
c290: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
c2a0: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
c2b0: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
c2c0: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
c2d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c2e0: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
c2f0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
c300: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
c310: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
c320: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
c330: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
c340: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
c350: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
c360: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
c370: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65  s&(mask))==0).#e
c380: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  lse.#define Opti
c390: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
c3a0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64  (db, mask)  0.#d
c3b0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c3c0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
c3d0: 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a  sk)   1.#endif..
c3e0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
c3f0: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
c400: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
c410: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
c420: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
c430: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
c440: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
c450: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
c460: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
c470: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
c480: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
c490: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
c4a0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
c4b0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c4c0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
c4d0: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
c4e0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
c4f0: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
c500: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
c510: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
c520: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
c530: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
c540: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
c550: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c560: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
c570: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
c580: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
c590: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c5a0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
c5b0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
c5c0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
c5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c5e0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
c5f0: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
c600: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
c610: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
c620: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
c630: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
c640: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
c650: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
c660: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c670: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
c680: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
c690: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
c6a0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
c6b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c6c0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
c6d0: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
c6e0: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
c6f0: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
c700: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
c710: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
c720: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
c730: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
c740: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
c750: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
c760: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
c770: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
c780: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
c790: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
c7a0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
c7b0: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
c7c0: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
c7d0: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
c7e0: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
c7f0: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
c800: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
c810: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
c820: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
c830: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c840: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
c850: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
c860: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
c870: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
c880: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
c890: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
c8a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
c8b0: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
c8c0: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
c8d0: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
c8e0: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
c8f0: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
c900: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
c910: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
c920: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
c930: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
c940: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
c950: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c960: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
c970: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
c980: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
c990: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
c9a0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
c9b0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
c9c0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c9e0: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
c9f0: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
ca00: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
ca10: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
ca20: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
ca30: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
ca40: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
ca50: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
ca60: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
ca70: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
ca80: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
ca90: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
caa0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
cab0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
cac0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
cad0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
cae0: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
caf0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
cb00: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
cb10: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
cb20: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
cb30: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
cb40: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
cb50: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
cb60: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
cb70: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
cb80: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
cb90: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
cba0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
cbb0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
cbc0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
cbd0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
cbe0: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
cbf0: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
cc00: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
cc10: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
cc20: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
cc30: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
cc40: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
cc50: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
cc60: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
cc70: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
cc80: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
cc90: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
cca0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
ccb0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
ccc0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
ccd0: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
cce0: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
ccf0: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
cd00: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
cd10: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
cd20: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
cd30: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
cd40: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
cd50: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
cd60: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
cd70: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
cd80: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
cd90: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
cda0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
cdb0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
cdc0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
cdd0: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
cde0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
cdf0: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
ce00: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
ce10: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ce20: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
ce30: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
ce40: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
ce50: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
ce60: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
ce70: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
ce80: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
ce90: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
cea0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
ceb0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
cec0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
ced0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
cee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cef0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
cf00: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
cf10: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
cf20: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
cf30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cf40: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
cf50: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
cf60: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
cf70: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
cf80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
cf90: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
cfa0: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
cfb0: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
cfc0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
cfd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
cfe0: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
cff0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
d000: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
d010: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d020: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
d030: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
d040: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
d050: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
d060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d070: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
d080: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
d090: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
d0a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d0b0: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
d0c0: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
d0d0: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
d0e0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d0f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
d100: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
d110: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
d120: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
d130: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d140: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
d150: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
d160: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
d170: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
d180: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
d190: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
d1a0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
d1b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d1c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d1d0: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20  _CONSTANT 0x800 
d1e0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d1f0: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d200: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d220: 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20  _MINMAX  0x1000 
d230: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
d240: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
d250: 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  egates */../*.**
d260: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
d270: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
d280: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
d290: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
d2a0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
d2b0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
d2c0: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
d2d0: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
d2e0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
d2f0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d300: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d310: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
d320: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
d330: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
d340: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
d350: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
d360: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
d370: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
d380: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
d390: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
d3a0: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
d3b0: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
d3c0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
d3d0: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
d3e0: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
d3f0: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
d400: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d410: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
d420: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
d430: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
d440: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
d450: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d460: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
d470: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
d480: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d490: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d4a0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
d4b0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
d4c0: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
d4d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d4e0: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
d4f0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
d500: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d510: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
d520: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
d530: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
d540: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
d550: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
d560: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
d570: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
d580: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
d590: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
d5a0: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
d5b0: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
d5c0: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
d5d0: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
d5e0: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
d5f0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
d600: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
d610: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
d620: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
d630: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
d640: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
d650: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
d660: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
d670: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
d680: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
d690: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
d6a0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
d6b0: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
d6c0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
d6d0: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
d6e0: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
d6f0: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
d700: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
d710: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
d720: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
d730: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
d740: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
d750: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
d760: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
d770: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
d780: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
d790: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
d7a0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
d7b0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d7c0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d7d0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
d7e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d7f0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d800: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d810: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d820: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d830: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d840: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d850: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d860: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
d870: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d880: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d890: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
d8a0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d8b0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d8c0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d8d0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d8e0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d8f0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d900: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
d910: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d920: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
d930: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
d940: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
d950: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d960: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d970: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
d980: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
d990: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
d9a0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
d9b0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
d9c0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
d9d0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d9e0: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
d9f0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
da00: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
da10: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
da20: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
da30: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
da40: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
da50: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
da60: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
da70: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
da80: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
da90: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
daa0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
dab0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
dac0: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
dad0: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
dae0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
daf0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
db00: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
db10: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
db20: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
db30: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
db40: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
db50: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
db60: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
db70: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
db80: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
db90: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64  l,#zName,0,0}.#d
dba0: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
dbb0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dbc0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dbd0: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
dbe0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
dbf0: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
dc00: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
dc10: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
dc20: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
dc30: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
dc40: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
dc50: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
dc60: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
dc70: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
dc80: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
dc90: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
dca0: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
dcb0: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
dcc0: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
dcd0: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
dce0: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
dcf0: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
dd00: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
dd10: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
dd20: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
dd30: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
dd40: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
dd50: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
dd60: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
dd90: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
dda0: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
ddb0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
dde0: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
ddf0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
de00: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
de20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
de30: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
de40: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
de50: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
de60: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
de70: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
de80: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
de90: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
dea0: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
deb0: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
dec0: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
ded0: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
dee0: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
def0: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
df00: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
df10: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
df20: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
df30: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
df40: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
df50: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
df60: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
df70: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
df80: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
df90: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
dfa0: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
dfb0: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
dfc0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
dfd0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
dfe0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
dff0: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
e000: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
e010: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
e020: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
e030: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
e040: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
e050: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
e060: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e070: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
e080: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
e090: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
e0a0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
e0b0: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
e0e0: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
e0f0: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
e100: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
e110: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
e120: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
e130: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e140: 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
e170: 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
e180: 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
e190: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
e1a0: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
e1b0: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
e1c0: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
e1d0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
e1e0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
e1f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
e200: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
e210: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
e220: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
e230: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
e240: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
e250: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
e260: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
e270: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69  Dflt;     /* Ori
e280: 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
e290: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
e2a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65  */.  char *zType
e2b0: 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79  ;     /* Data ty
e2c0: 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75  pe for this colu
e2d0: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
e2e0: 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
e2f0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
e300: 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
e310: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
e320: 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
e330: 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
e340: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
e350: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
e360: 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
e370: 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
e380: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
e390: 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
e3a0: 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
e3b0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
e3c0: 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ize of this colu
e3d0: 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20  mn.  INT==1 */. 
e3e0: 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
e3f0: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
e400: 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
e410: 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
e420: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
e430: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
e440: 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
e450: 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
e460: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
e470: 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
e480: 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
e490: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
e4a0: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
e4b0: 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
e4c0: 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
e4d0: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
e4e0: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  ual table */../*
e4f0: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
e500: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
e510: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
e520: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e530: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
e540: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
e550: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
e560: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
e570: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
e580: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
e590: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
e5a0: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
e5b0: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
e5c0: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
e5d0: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
e5e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
e5f0: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
e600: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
e610: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
e620: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
e630: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
e640: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
e650: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
e660: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
e670: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
e680: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
e690: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
e6a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
e6b0: 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
e6c0: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e6e0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
e6f0: 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
e700: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
e710: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
e720: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
e730: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
e740: 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
e750: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
e760: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
e770: 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
e780: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
e790: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
e7a0: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
e7b0: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
e7c0: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
e7d0: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
e7e0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
e7f0: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
e800: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
e810: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
e820: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
e830: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
e840: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
e850: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
e860: 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
e870: 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
e880: 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
e890: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
e8a0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
e8b0: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
e8c0: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
e8d0: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
e8e0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
e8f0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
e900: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
e910: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
e920: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
e930: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
e940: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
e950: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
e960: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
e970: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
e980: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
e990: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
e9a0: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
e9b0: 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
e9c0: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
e9d0: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
e9e0: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
e9f0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
ea00: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
ea10: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
ea20: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
ea30: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
ea40: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
ea50: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
ea60: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
ea70: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
ea80: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
ea90: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
eaa0: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
eab0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
eac0: 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
ead0: 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
eae0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
eaf0: 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
eb00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
eb10: 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
eb20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
eb30: 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
eb40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
eb50: 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
eb60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
eb70: 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
eb80: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
eb90: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
eba0: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
ebb0: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
ebc0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ebd0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
ebe0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
ebf0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
ec00: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
ec10: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
ec20: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
ec30: 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
ec40: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
ec50: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
ec60: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
ec70: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
ec80: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
ec90: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
eca0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
ecb0: 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
ecc0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
ecd0: 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
ece0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
ecf0: 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
ed00: 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
ed10: 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
ed20: 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
ed30: 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
ed40: 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
ed50: 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
ed60: 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
ed70: 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
ed80: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
ed90: 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
eda0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
edb0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
edc0: 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
edd0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ede0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
edf0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ee00: 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
ee10: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
ee20: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
ee30: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
ee40: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
ee50: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
ee60: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
ee70: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
ee80: 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
ee90: 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
eea0: 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
eeb0: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
eec0: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
eed0: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
eee0: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
eef0: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
ef00: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
ef10: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
ef20: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
ef30: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
ef40: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
ef50: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
ef60: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
ef70: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
ef80: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ef90: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
efa0: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
efb0: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
efc0: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
efd0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
efe0: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
eff0: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
f000: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
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 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
f030: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
f040: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
f050: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
f060: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f070: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
f080: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
f090: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f0a0: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
f0b0: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
f0c0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
f0d0: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
f0e0: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
f0f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
f100: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
f110: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
f120: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
f130: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
f140: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
f150: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
f160: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
f170: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
f180: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
f190: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
f1a0: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
f1b0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
f1c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
f1d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
f1e0: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
f1f0: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
f200: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
f210: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
f220: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
f230: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
f240: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
f250: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
f260: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
f270: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
f280: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
f290: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
f2a0: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
f2b0: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
f2c0: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
f2d0: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
f2e0: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
f2f0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
f300: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
f310: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
f320: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
f330: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
f340: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
f350: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
f360: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
f370: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
f380: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
f390: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
f3a0: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
f3b0: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
f3c0: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
f3d0: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
f3e0: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
f3f0: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
f400: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
f410: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
f420: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
f430: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f440: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
f450: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
f460: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
f470: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
f480: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
f490: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
f4a0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
f4b0: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
f4c0: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
f4d0: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
f4e0: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
f4f0: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
f500: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
f510: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
f520: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
f530: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
f540: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
f550: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
f560: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
f570: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
f580: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
f590: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
f5a0: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f5b0: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
f5c0: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
f5d0: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
f5e0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
f5f0: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
f600: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
f610: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
f620: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
f630: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
f640: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
f650: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
f660: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
f670: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
f680: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
f690: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
f6a0: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
f6b0: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
f6c0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
f6d0: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
f6e0: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
f6f0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
f700: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
f710: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
f720: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
f730: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
f740: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
f750: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
f760: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
f770: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
f780: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
f790: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
f7a0: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
f7b0: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
f7c0: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
f7d0: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
f7e0: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
f7f0: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
f800: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
f810: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
f820: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
f830: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
f840: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
f850: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
f860: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
f870: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
f880: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
f890: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
f8a0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f8b0: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
f8c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
f8d0: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
f8e0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
f8f0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
f900: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
f910: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
f920: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
f930: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
f940: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f950: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
f960: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
f970: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
f980: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
f990: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
f9a0: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
f9b0: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
f9c0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
f9d0: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
f9e0: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
f9f0: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
fa00: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
fa10: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
fa20: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
fa30: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
fa40: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
fa50: 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
fa60: 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
fa70: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
fa80: 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
fa90: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
faa0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
fab0: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
fac0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
fad0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
fae0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
faf0: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
fb00: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
fb10: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
fb20: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
fb30: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
fb40: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
fb50: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
fb60: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
fb70: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
fb80: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
fb90: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
fba0: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
fbb0: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
fbc0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
fbd0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
fbe0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
fbf0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
fc00: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fc10: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
fc20: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
fc30: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
fc40: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
fc50: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
fc60: 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
fc70: 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
fc80: 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
fcb0: 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
fcc0: 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
fcd0: 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
fcf0: 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
fd00: 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
fd10: 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
fd20: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
fd30: 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
fd40: 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
fd50: 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
fd60: 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
fd70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fd80: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
fd90: 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
fda0: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
fdb0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
fdc0: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
fdd0: 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
fde0: 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
fdf0: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
fe00: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
fe10: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
fe20: 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
fe30: 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
fe40: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
fe50: 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
fe60: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
fe70: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
fe80: 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
fe90: 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
fea0: 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
feb0: 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
fec0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
fed0: 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67  dif.  u8 tabFlag
fee0: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
fef0: 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
ff00: 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
ff10: 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
ff20: 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
ff30: 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
ff40: 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
ff50: 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
ff60: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
ff70: 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
ff80: 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
ff90: 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
ffa0: 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
ffb0: 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
ffc0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
ffd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
ffe0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
fff0: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
10000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
10010 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
10020 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
10030 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
10040 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
10050 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
10060 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
10070 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
10080 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
10090 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
100a0 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
100b0 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
100c0 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
100d0 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
100e0 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
100f0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
10100 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
10110 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
10120 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
10130 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
10140 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
10150 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
10160 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
10170 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
10180 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
10190 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
101a0 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
101b0 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
101c0 65 73 20 74 68 61 74 20 68 61 76 65 20 68 69 64  es that have hid
101d0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
101e0 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
101f0 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
10200 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
10210 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
10220 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
10230 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
10240 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
10250 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
10260 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
10270 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
10280 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
10290 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
102a0 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
102b0 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
102c0 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
102d0 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
102e0 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
102f0 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
10300 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
10310 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
10320 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
10330 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
10340 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
10350 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
10360 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
10370 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
10380 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
10390 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
103a0 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
103b0 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
103c0 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
103d0 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
103e0 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
103f0 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
10400 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
10410 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
10420 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
10430 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10440 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
10450 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
10460 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
10470 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
10480 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
10490 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
104a0 62 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20  bleRowid  0x40  
104b0 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73    /* No user-vis
104c0 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c  ible "rowid" col
104d0 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  umn */.#define T
104e0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
104f0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74    0x80    /* Out
10500 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
10510 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a   columns */.../*
10520 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
10530 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
10540 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
10550 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
10560 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
10570 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
10580 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
10590 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
105a0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
105b0 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
105c0 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
105d0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
105e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
105f0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
10600 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
10610 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
10620 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
10630 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
10640 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
10650 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
10660 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
10670 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
10680 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
10690 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
106a0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
106b0 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
106c0 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
106d0 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
106e0 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
106f0 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
10700 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
10710 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
10720 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
10730 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
10740 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
10750 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
10760 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
10770 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
10780 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
10790 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
107a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
107b0 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
107c0 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
107d0 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
107e0 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
107f0 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
10800 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
10810 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
10820 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
10830 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
10840 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
10850 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
10860 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
10870 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
10880 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
10890 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
108a0 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
108b0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
108c0 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
108d0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
108e0 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
108f0 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
10900 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
10910 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
10920 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
10930 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
10940 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
10950 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
10960 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
10970 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
10980 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
10990 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
109a0 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
109b0 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
109c0 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
109d0 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
109e0 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
109f0 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
10a00 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
10a10 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
10a20 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
10a30 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
10a40 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
10a50 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
10a60 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
10a70 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
10a80 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
10a90 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
10aa0 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
10ab0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
10ac0 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
10ad0 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
10ae0 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
10af0 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
10b00 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
10b10 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
10b20 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
10b30 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
10b40 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
10b50 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
10b60 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
10b70 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
10b80 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
10b90 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
10ba0 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
10bb0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10bc0 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
10bd0 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
10be0 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
10bf0 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
10c00 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
10c10 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
10c20 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
10c30 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
10c40 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
10c50 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
10c60 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
10c70 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
10c80 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
10c90 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
10ca0 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
10cb0 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
10cc0 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
10cd0 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
10ce0 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
10cf0 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
10d00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10d10 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
10d20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
10d30 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
10d40 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
10d50 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
10d60 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
10d70 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
10d80 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
10d90 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
10da0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
10db0 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
10dc0 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
10dd0 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
10de0 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
10df0 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
10e00 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
10e10 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
10e20 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
10e30 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
10e40 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
10e50 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
10e60 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
10e70 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
10e80 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
10e90 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
10ea0 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
10eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10ec0 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
10ed0 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
10ee0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
10ef0 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
10f00 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
10f10 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
10f20 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
10f30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
10f40 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
10f50 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
10f60 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
10f70 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
10f80 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
10f90 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
10fa0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
10fb0 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
10fc0 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
10fd0 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
10fe0 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
10ff0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
11000 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
11010 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
11020 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
11030 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
11040 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
11050 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
11060 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
11070 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
11080 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
11090 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
110a0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
110b0 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
110c0 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
110d0 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
110e0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
110f0 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
11100 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
11110 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
11120 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
11130 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
11140 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
11150 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
11160 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
11170 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
11180 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
11190 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
111a0 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
111b0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
111c0 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
111d0 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
111e0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
111f0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
11200 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
11210 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
11220 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
11230 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
11240 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
11250 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
11260 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
11270 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
11280 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
11290 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
112a0 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
112b0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
112c0 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
112d0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
112e0 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
112f0 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
11300 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
11310 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
11320 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
11330 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
11340 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
11350 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
11360 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
11370 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
11380 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
11390 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
113a0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
113b0 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
113c0 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
113d0 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
113e0 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
113f0 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
11400 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
11410 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
11420 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
11430 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
11440 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ** .** The follo
11450 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
11460 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
11470 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
11480 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
11490 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
114a0 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
114b0 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
114c0 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
114d0 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
114e0 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
114f0 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
11500 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
11510 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
11520 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
11530 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
11540 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
11550 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
11560 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
11570 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
11580 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
11590 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
115a0 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
115b0 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
115c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
115d0 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
115e0 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
115f0 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
11600 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
11610 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
11620 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
11630 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
11640 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
11650 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
11660 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  ..#define OE_Res
11670 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f  trict 6   /* OE_
11680 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
11690 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
116a0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
116b0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
116c0 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20  ull  7   /* Set 
116d0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
116e0 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
116f0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
11700 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20  flt  8   /* Set 
11710 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
11720 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
11730 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
11740 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20  OE_Cascade  9   
11750 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
11760 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69  hanges */..#defi
11770 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
11780 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  0  /* Do whateve
11790 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
117a0 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
117b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
117c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
117d0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
117e0 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
117f0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
11800 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
11810 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
11820 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
11830 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20   .** comparison 
11840 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
11850 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
11860 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
11870 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
11880 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
11890 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
118a0 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
118b0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
118c0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
118d0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
118e0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
118f0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
11900 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
11910 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
11920 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11930 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
11940 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
11950 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
11960 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
11970 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
11980 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
11990 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
119a0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
119b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
119c0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
119d0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
119e0 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
119f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11a00 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
11a10 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
11a20 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
11a30 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
11a40 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
11a50 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
11a60 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
11a70 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
11a80 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
11a90 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
11aa0 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
11ab0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
11ac0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
11ad0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
11ae0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
11af0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11b00 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
11b10 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
11b20 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20  out a.** single 
11b30 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61  index record tha
11b40 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
11b50 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
11b60 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
11b70 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   values..**.** A
11b80 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
11b90 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
11ba0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
11bb0 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
11bc0 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
11bd0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
11be0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
11bf0 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
11c00 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
11c10 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
11c20 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
11c30 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
11c40 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
11c50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
11c60 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
11c70 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
11c80 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
11c90 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
11ca0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
11cb0 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ure holds a reco
11cc0 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
11cd0 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65  ady been disasse
11ce0 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74  mbled.** into it
11cf0 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69  s constituent fi
11d00 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  elds..**.** The 
11d10 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72  r1 and r2 member
11d20 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
11d30 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20  nly used by the 
11d40 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72  optimized compar
11d50 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ison.** function
11d60 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70  s vdbeRecordComp
11d70 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62  areInt() and vdb
11d80 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74  eRecordCompareSt
11d90 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63  ring()..*/.struc
11da0 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
11db0 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
11dc0 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
11dd0 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
11de0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
11df0 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
11e00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
11e10 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
11e20 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
11e30 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
11e40 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
11e50 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
11e60 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
11e70 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
11e80 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
11e90 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
11ea0 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
11eb0 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d  or NOMEM) */.  M
11ec0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
11ed0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
11ee0 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20    int r1;       
11ef0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
11f00 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
11f10 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74   > rhs) */.  int
11f20 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   r2;            
11f30 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
11f40 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68  urn if (rhs < lh
11f50 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  s) */.};.../*.**
11f60 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
11f70 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
11f80 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
11f90 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
11fa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11fb0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
11fc0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11fd0 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
11fe0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
11ff0 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
12000 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
12010 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
12020 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
12030 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
12040 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
12050 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
12060 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
12070 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
12080 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
12090 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
120a0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
120b0 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
120c0 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
120d0 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
120e0 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
120f0 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
12100 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
12110 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
12120 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
12130 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
12140 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
12150 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
12160 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
12170 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
12180 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
12190 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
121a0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
121b0 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
121c0 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
121d0 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
121e0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
121f0 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
12200 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
12210 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
12220 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
12230 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
12240 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
12250 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
12260 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
12270 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
12280 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
12290 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
122a0 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
122b0 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
122c0 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
122d0 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
122e0 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
122f0 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
12300 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
12310 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
12320 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
12330 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
12340 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
12350 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
12360 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
12370 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
12380 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
12390 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
123a0 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
123b0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
123c0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
123d0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
123e0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
123f0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
12400 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
12410 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
12420 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
12430 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
12440 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
12450 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
12460 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
12470 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
12480 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
12490 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
124a0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
124b0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
124c0 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
124d0 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
124e0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
124f0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
12500 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
12510 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
12520 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
12530 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
12540 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
12550 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
12560 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
12570 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
12580 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
12590 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
125a0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
125b0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
125c0 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
125d0 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
125e0 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
125f0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
12600 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
12610 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
12620 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
12630 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
12640 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
12650 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
12660 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
12670 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
12680 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
12690 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
126a0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
126b0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
126c0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
126d0 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
126e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
126f0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
12700 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
12710 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
12720 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
12730 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
12740 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
12750 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
12760 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
12770 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
12780 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
12790 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
127a0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
127b0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
127c0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
127d0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
127e0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
127f0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
12800 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
12810 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
12820 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
12830 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
12840 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68  lse==ASC */.  ch
12850 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
12860 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
12870 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
12880 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
12890 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
128a0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
128b0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
128c0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
128d0 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e 74  indices */.  int
128e0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
128f0 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
12900 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
12910 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
12920 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
12930 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
12940 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
12950 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
12960 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
12970 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
12980 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12990 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
129a0 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
129b0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
129c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
129d0 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
129e0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
129f0 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
12a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
12a10 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
12a20 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
12a30 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
12a40 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
12a50 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
12a60 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
12a70 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
12a80 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
12a90 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
12aa0 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
12ab0 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
12ac0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
12ad0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
12ae0 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
12af0 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
12b00 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
12b10 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
12b20 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
12b30 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
12b40 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
12b50 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
12b60 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
12b70 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
12b80 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
12b90 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
12ba0 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
12bb0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
12bc0 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
12bd0 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
12be0 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
12bf0 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  e */.#ifdef SQLI
12c00 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
12c10 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
12c20 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
12c30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12c40 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
12c50 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
12c60 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
12c70 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
12c80 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
12c90 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
12ca0 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
12cb0 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
12cc0 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
12cd0 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
12ce0 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
12cf0 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
12d00 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
12d10 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
12d20 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
12d30 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
12d40 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
12d50 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
12d60 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
12d70 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
12d80 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
12d90 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
12da0 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
12db0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
12dc0 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
12dd0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
12de0 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
12df0 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
12e00 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
12e10 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
12e20 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
12e30 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
12e40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
12e50 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
12e60 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
12e70 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
12e80 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
12e90 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12ea0 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
12eb0 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
12ec0 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
12ed0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
12ee0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
12ef0 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
12f00 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
12f10 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
12f20 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
12f30 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
12f40 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
12f50 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
12f60 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
12f70 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
12f80 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
12f90 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
12fa0 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
12fb0 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a  r!=OE_None)../*.
12fc0 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
12fd0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
12fe0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
12ff0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
13000 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69  n memory .** usi
13010 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
13020 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
13030 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
13040 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
13050 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
13060 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
13070 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
13080 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
13090 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
130a0 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
130b0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
130c0 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
130d0 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
130e0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
130f0 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
13100 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
13110 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
13120 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
13130 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
13140 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
13150 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13160 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
13170 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
13180 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
13190 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
131a0 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
131b0 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
131c0 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
131d0 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
131e0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
131f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
13200 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
13210 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
13220 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
13230 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
13240 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
13250 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
13260 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
13270 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
13280 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
13290 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
132a0 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
132b0 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
132c0 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
132d0 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
132e0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
132f0 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
13300 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
13310 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
13320 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
13330 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
13340 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
13350 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
13360 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
13370 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
13380 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
13390 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
133a0 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
133b0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
133c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
133d0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
133e0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
133f0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
13400 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
13410 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
13420 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
13430 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
13440 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
13450 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
13460 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
13470 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
13480 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
13490 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
134a0 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
134b0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
134c0 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
134d0 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
134e0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
134f0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
13500 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
13510 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
13520 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
13530 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
13540 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
13550 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
13560 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
13570 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
13580 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
13590 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
135a0 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
135b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
135c0 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
135d0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
135e0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
135f0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
13600 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
13610 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
13620 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
13630 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
13640 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
13650 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
13660 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
13690 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
136a0 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
136b0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
136c0 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
136d0 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
136e0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
136f0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
13700 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
13730 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
13740 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
13750 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
13760 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
13770 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
13780 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
13790 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
137a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
137b0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
137c0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
137d0 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
137e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
137f0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
13800 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
13810 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
13820 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
13830 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
13840 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
13850 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
13860 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
13870 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
13880 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
13890 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
138a0 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
138b0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
138c0 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
138d0 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
138e0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
138f0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
13900 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
13910 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
13920 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
13930 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
13940 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
13950 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
13960 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
13970 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
13980 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
13990 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
139a0 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
139b0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
139c0 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
139d0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
139e0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
139f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
13a00 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
13a10 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
13a20 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
13a30 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13a40 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
13a50 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
13a60 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
13a70 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
13a80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13a90 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
13aa0 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
13ab0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
13ac0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
13ad0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
13ae0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
13af0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
13b20 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
13b30 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
13b40 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
13b70 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
13b80 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
13b90 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
13ba0 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
13bb0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
13bc0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
13bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
13be0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
13bf0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
13c00 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
13c10 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
13c20 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
13c30 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
13c40 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
13c50 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
13c60 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
13c70 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
13c80 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
13c90 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
13ca0 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
13cb0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
13cc0 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
13cd0 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
13ce0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
13cf0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
13d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13d10 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
13d20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
13d30 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
13d40 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
13d50 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
13d60 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
13d70 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
13d80 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
13d90 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
13da0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
13db0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
13dc0 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
13dd0 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
13de0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
13df0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
13e00 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
13e10 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
13e20 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
13e30 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
13e40 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
13e50 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
13e60 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
13e70 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
13e80 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
13e90 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
13ea0 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
13eb0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
13ec0 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
13ed0 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
13ee0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
13ef0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
13f00 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
13f10 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
13f20 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
13f30 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
13f40 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
13f50 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
13f60 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
13f70 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
13f80 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
13f90 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
13fa0 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
13fb0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
13fc0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
13fd0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
13fe0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
13ff0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
14000 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
14010 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
14020 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
14030 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
14040 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
14050 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
14060 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
14070 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
14080 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
14090 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
140a0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
140b0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
140c0 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
140d0 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
140e0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
140f0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
14100 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
14110 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
14120 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
14130 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
14140 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
14150 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
14160 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
14170 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20  TK_BLOB, .** or 
14180 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
14190 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
141a0 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
141b0 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
141c0 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
141d0 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
141e0 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
141f0 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
14200 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14210 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61   .** variable na
14220 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
14230 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14240 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
14250 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
14260 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
14270 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14280 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
14290 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
142a0 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
142b0 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
142c0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
142d0 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
142e0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
142f0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
14300 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
14310 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
14320 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
14330 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
14340 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14350 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
14360 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
14370 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
14380 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
14390 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
143a0 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
143b0 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
143c0 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
143d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
143e0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
143f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
14400 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
14410 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
14420 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
14430 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
14440 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
14450 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
14460 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
14470 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
14480 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
14490 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61  .pList is .** va
144a0 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
144b0 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
144c0 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
144d0 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
144e0 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
144f0 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
14500 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
14510 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
14520 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
14530 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
14540 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
14550 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
14560 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
14570 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
14580 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
14590 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
145a0 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
145b0 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
145c0 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
145d0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
145e0 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
145f0 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
14600 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
14610 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
14620 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
14630 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
14640 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
14650 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
14660 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
14670 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
14680 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
14690 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
146a0 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
146b0 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
146c0 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
146d0 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  rk .** character
146e0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
146f0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
14700 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
14710 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a  olds the index .
14720 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
14730 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
14740 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
14750 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
14760 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
14770 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
14780 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
14790 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
147a0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
147b0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
147c0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
147d0 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
147e0 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
147f0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
14800 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
14810 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
14820 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
14830 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
14840 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
14850 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
14860 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
14870 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
14880 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
14890 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
148a0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
148b0 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
148c0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
148d0 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
148e0 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
148f0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
14900 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
14910 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
14920 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
14930 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
14940 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
14950 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
14960 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
14970 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
14980 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
14990 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
149a0 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
149b0 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
149c0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
149d0 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
149e0 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
149f0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
14a00 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
14a10 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
14a20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
14a30 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
14a40 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
14a50 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
14a60 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
14a70 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
14a80 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
14a90 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
14aa0 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
14ab0 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
14ac0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
14ad0 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
14ae0 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
14af0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
14b00 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
14b10 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
14b20 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
14b30 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
14b40 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
14b50 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
14b60 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
14b70 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
14b80 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
14b90 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
14ba0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
14bb0 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
14bc0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
14bd0 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
14be0 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
14bf0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
14c00 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
14c10 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
14c20 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
14c30 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
14c40 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
14c50 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
14c60 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
14c70 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
14c80 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
14c90 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
14ca0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
14cb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
14cc0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
14cd0 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
14ce0 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
14cf0 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
14d00 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
14d10 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
14d20 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
14d30 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
14d40 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
14d50 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
14d60 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
14d70 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
14d80 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
14d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
14da0 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
14db0 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
14dc0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
14dd0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
14de0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
14df0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
14e00 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
14e10 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
14e20 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
14e30 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
14e40 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
14e50 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
14e60 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
14e70 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
14e80 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
14e90 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a  function. .  ***
14ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ee0 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
14ef0 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
14f00 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
14f10 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
14f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
14f30 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
14f40 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
14f50 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
14f60 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
14f70 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
14f80 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
14f90 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
14fa0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
14fb0 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
14fc0 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
14fd0 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
14fe0 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
14ff0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
15000 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
15010 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
15020 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
15030 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
15040 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
15050 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
15060 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
15070 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
15080 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
15090 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
150a0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
150b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150f0 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
15100 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
15110 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
15120 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
15130 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
15140 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
15150 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
15160 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
15170 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
15180 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
15190 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
151a0 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
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 54 4b 5f 52 45 47 49        ** TK_REGI
151d0 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
151e0 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15200 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
15210 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
15220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15230 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
15240 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
15250 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
15260 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
15270 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
15280 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
15290 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
152a0 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
152d0 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
152e0 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
152f0 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
15300 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
15310 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
15320 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
15330 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
15340 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
15350 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
15360 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
15370 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
15380 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
15390 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
153a0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
153b0 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
153c0 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
153d0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
153e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
153f0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
15400 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
15410 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
15440 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
15450 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
15460 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
15470 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
15480 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
15490 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
154a0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
154b0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
154c0 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
154d0 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
154e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
154f0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
15500 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
15510 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
15520 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
15530 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
15540 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
15550 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
15560 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
15570 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
15580 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
15590 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
155a0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
155b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
155c0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
155d0 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
155e0 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
155f0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
15600 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
15610 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
15620 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
15630 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
15640 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
15650 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
15660 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
15670 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
15680 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
15690 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
156a0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
156b0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
156c0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
156d0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
156e0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
156f0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
15700 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
15710 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
15720 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
15730 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
15740 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
15750 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
15760 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
15770 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
15780 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
15790 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
157a0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
157b0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
157c0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
157d0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
157e0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
157f0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
15800 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
15810 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
15820 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
15830 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
15840 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
15850 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
15860 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
15870 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
15880 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
15890 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
158a0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
158b0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
158c0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
158d0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
158e0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
158f0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
15900 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
15910 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
15920 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
15930 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
15940 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
15950 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
15960 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
15970 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
15980 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
15990 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
159a0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
159b0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
159c0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
159d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
159e0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
159f0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
15a00 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
15a10 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
15a20 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
15a30 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
15a40 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
15a50 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
15a60 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
15a70 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
15a80 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
15a90 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
15aa0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15ab0 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
15ac0 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
15ad0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
15ae0 54 41 4e 54 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  TANT function */
15af0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
15b00 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
15b10 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
15b20 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
15b30 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15b40 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
15b50 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
15b60 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
15b70 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
15b80 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69   */../*.** Combi
15b90 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f  nations of two o
15ba0 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67  r more EP_* flag
15bb0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s.*/.#define EP_
15bc0 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f  Propagate (EP_Co
15bd0 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72  llate|EP_Subquer
15be0 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20  y) /* Propagate 
15bf0 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72  these bits up tr
15c00 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ee */../*.** The
15c10 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
15c20 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
15c30 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
15c40 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
15c50 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
15c60 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
15c70 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
15c80 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
15c90 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
15ca0 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
15cb0 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
15cc0 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
15cd0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
15ce0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
15cf0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
15d00 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
15d10 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
15d20 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
15d30 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
15d40 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
15d50 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
15d60 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
15d70 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
15d80 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
15d90 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
15da0 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
15db0 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
15dc0 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
15dd0 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
15de0 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
15df0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
15e00 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
15e10 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
15e20 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
15e30 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
15e40 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
15e50 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
15e60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
15e70 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
15e80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
15e90 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
15ea0 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a   a normal Expr .
15eb0 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
15ec0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
15ed0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
15ee0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
15ef0 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20  lags .** and an 
15f00 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
15f10 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
15f20 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
15f30 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
15f40 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
15f50 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
15f60 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
15f70 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
15f80 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
15f90 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
15fa0 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
15fb0 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
15fc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15fd0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
15fe0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
15ff0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
16000 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
16010 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
16020 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
16030 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
16040 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
16050 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20  der comment .** 
16060 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
16070 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
16080 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
16090 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
160a0 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
160b0 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
160c0 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
160d0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
160e0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
160f0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
16100 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
16110 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
16120 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
16130 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
16140 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
16150 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
16160 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
16170 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
16180 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
16190 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
161a0 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
161b0 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
161c0 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
161d0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
161e0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
161f0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
16200 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
16210 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
16220 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
16230 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
16240 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
16250 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
16260 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
16270 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
16280 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
16290 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
162a0 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
162b0 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
162c0 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
162d0 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
162e0 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
162f0 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
16300 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
16310 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
16320 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
16330 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
16340 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
16350 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
16360 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
16370 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
16380 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
16390 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
163a0 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
163b0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
163c0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
163d0 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
163e0 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
163f0 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
16400 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
16410 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
16420 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
16430 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
16440 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
16450 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
16460 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16470 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
16480 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
16490 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
164a0 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
164b0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
164c0 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
164d0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
164e0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
164f0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
16500 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
16510 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
16520 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
16530 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
16540 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
16550 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
16560 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
16570 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
16580 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
16590 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
165a0 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
165b0 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
165c0 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
165d0 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
165e0 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
165f0 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
16600 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
16610 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
16620 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
16630 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
16640 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
16650 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
16660 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
16670 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
16680 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
16690 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  able */.    unio
166a0 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
166b0 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
166c0 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
166d0 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
166e0 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
166f0 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
16700 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
16710 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
16720 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
16730 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
16740 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
16750 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
16760 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
16770 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
16780 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
16790 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
167a0 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20     } u;.  } *a; 
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65   /* Alloc a powe
167d0 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72  r of two greater
167e0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78   or equal to nEx
167f0 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  pr */.};../*.** 
16800 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
16810 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
16820 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72   used by the par
16830 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f  ser to record bo
16840 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20  th.** the parse 
16850 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72  tree for an expr
16860 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
16870 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78  pan of input tex
16880 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72  t for an.** expr
16890 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ession..*/.struc
168a0 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45  t ExprSpan {.  E
168b0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
168c0 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72       /* The expr
168d0 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65  ession parse tre
168e0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
168f0 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20  r *zStart;   /* 
16900 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  First character 
16910 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
16920 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
16930 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20  End;     /* One 
16940 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74  character past t
16950 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20  he end of input 
16960 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  text */.};../*.*
16970 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
16980 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16990 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
169a0 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
169b0 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
169c0 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
169d0 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
169e0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
169f0 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
16a00 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
16a10 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
16a20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
16a30 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
16a40 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
16a50 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
16a60 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
16a70 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
16a80 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
16a90 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
16aa0 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
16ab0 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
16ac0 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
16ad0 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
16ae0 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
16af0 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
16b00 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
16b10 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
16b20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
16b30 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
16b40 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
16b50 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
16b60 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
16b70 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
16b80 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
16b90 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
16ba0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
16bb0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
16bc0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
16bd0 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
16be0 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
16bf0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
16c00 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
16c10 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
16c20 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
16c30 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
16c40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16c50 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
16c60 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
16c70 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  ;../*.** The bit
16c80 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
16c90 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
16ca0 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
16cb0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
16cc0 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
16cd0 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
16ce0 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
16cf0 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
16d00 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
16d10 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
16d20 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
16d30 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
16d40 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
16d50 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
16d60 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
16d70 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  ix86..*/.typedef
16d80 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f   u64 Bitmask;../
16d90 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
16da0 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
16db0 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
16dc0 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
16dd0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
16de0 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
16df0 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
16e00 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20  *.** A bit in a 
16e10 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69  Bitmask.*/.#defi
16e20 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20  ne MASKBIT(n)   
16e30 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28  (((Bitmask)1)<<(
16e40 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  n)).#define MASK
16e50 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69  BIT32(n) (((unsi
16e60 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29  gned int)1)<<(n)
16e70 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
16e80 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
16e90 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
16ea0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
16eb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16ec0 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
16ed0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
16ee0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
16ef0 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
16f00 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
16f10 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
16f20 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
16f30 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
16f40 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
16f50 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
16f60 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
16f70 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
16f80 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
16f90 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
16fa0 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
16fb0 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
16fc0 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
16fd0 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
16fe0 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
16ff0 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
17000 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
17010 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
17020 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
17030 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
17040 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
17050 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
17060 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
17070 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
17080 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
17090 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
170a0 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
170b0 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
170c0 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
170d0 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
170e0 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
170f0 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
17100 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
17110 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
17120 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
17130 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
17140 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
17150 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
17160 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
17170 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
17180 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
17190 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
171a0 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
171b0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
171c0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
171d0 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
171e0 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
171f0 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
17200 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
17210 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
17220 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
17230 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
17240 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
17250 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
17260 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
17270 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
17280 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17290 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
172a0 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
172b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
172c0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
172d0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
172e0 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
172f0 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
17300 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
17310 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
17320 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
17330 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
17340 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
17350 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
17360 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
17370 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
17380 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
17390 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
173a0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
173b0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
173c0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
173d0 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
173e0 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
173f0 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
17400 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
17410 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
17420 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
17430 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
17440 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
17450 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
17460 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
17470 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
17480 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
17490 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
174a0 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
174b0 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
174c0 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
174d0 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
174e0 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
174f0 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
17500 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
17510 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
17520 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
17530 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
17540 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
17550 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
17560 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
17570 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
17580 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
17590 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
175a0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
175b0 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
175c0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
175d0 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
175e0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
175f0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
17600 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
17610 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
17620 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
17630 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
17640 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
17650 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
17660 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
17670 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
17680 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
17690 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
176a0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
176b0 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
176c0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
176d0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
176e0 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
176f0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
17700 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
17710 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
17720 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
17730 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
17740 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
17750 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
17760 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
17770 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
17780 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
17790 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64  .    } fg;.#ifnd
177a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
177b0 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
177c0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
177d0 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
177e0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
177f0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
17800 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
17810 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
17820 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
17830 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
17840 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
17850 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
17860 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
17870 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
17880 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
17890 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
178a0 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
178b0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
178c0 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
178d0 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
178e0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
178f0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
17900 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e  s used */.    un
17910 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72  ion {.      char
17920 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20   *zIndexedBy;   
17930 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
17940 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
17950 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
17960 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69   */.      ExprLi
17970 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f  st *pFuncArg;  /
17980 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  * Arguments to t
17990 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
179a0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31  tion */.    } u1
179b0 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42  ;.    Index *pIB
179c0 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78  Index;  /* Index
179d0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
179e0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a  sponding to u1.z
179f0 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d  IndexedBy */.  }
17a00 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
17a10 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
17a20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
17a30 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
17a40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
17a50 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
17a60 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
17a70 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
17a80 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
17a90 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
17aa0 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
17ab0 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
17ac0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17ad0 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
17ae0 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
17af0 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
17b00 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
17b10 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
17b20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
17b30 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
17b40 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
17b50 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
17b60 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
17b70 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
17b80 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
17b90 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
17ba0 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
17bb0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
17bc0 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
17bd0 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
17be0 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
17bf0 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
17c00 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
17c10 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
17c20 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
17c30 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
17c40 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
17c50 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
17c60 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
17c70 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
17c80 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
17c90 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
17ca0 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
17cb0 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
17cc0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17cd0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
17ce0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
17cf0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
17d00 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
17d10 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
17d20 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
17d30 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
17d40 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
17d50 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
17d60 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
17d70 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
17d80 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
17d90 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
17da0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
17db0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
17dc0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
17dd0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
17de0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
17df0 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
17e00 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
17e10 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
17e20 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
17e30 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
17e40 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
17e50 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
17e60 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
17e70 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
17e80 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
17e90 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
17ea0 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
17eb0 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
17ec0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
17ed0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
17ee0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
17ef0 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
17f00 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
17f10 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55  fine WHERE_NO_AU
17f20 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30 30  TOINDEX     0x00
17f30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61  80 /* Disallow a
17f40 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
17f50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17f60 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
17f70 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72     0x0100 /* pOr
17f80 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
17f90 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
17fa0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17fb0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
17fc0 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  200 /* pOrderby 
17fd0 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
17fe0 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
17ff0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
18000 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
18010 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0400 /* All outp
18020 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
18030 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
18040 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
18050 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30 30  ROUP      0x0800
18060 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
18070 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
18080 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
18090 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20  ERE_REOPEN_IDX  
180a0 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54       0x1000 /* T
180b0 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f  ry to use OP_Reo
180c0 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c  penIdx */../* Al
180d0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
180e0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
180f0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
18100 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ).*/.#define WHE
18110 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50  RE_DISTINCT_NOOP
18120 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54        0  /* DIST
18130 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74  INCT keyword not
18140 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
18150 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
18160 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20  UNIQUE    1  /* 
18170 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f  No duplicates */
18180 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
18190 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20  ISTINCT_ORDERED 
181a0 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c    2  /* All dupl
181b0 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63  icates are adjac
181c0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ent */.#define W
181d0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
181e0 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75  ORDERED 3  /* Du
181f0 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61  plicates are sca
18200 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ttered */../*.**
18210 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64   A NameContext d
18220 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74  efines a context
18230 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73   in which to res
18240 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63  olve table and c
18250 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20  olumn.** names. 
18260 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   The context con
18270 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20  sists of a list 
18280 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70  of tables (the p
18290 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61  SrcList) field a
182a0 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20  nd.** a list of 
182b0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
182c0 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20   (pEList).  The 
182d0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
182e0 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20   list may.** be 
182f0 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20  NULL.  The pSrc 
18300 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
18310 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
18320 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a  f a SELECT or.**
18330 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65   to the table be
18340 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
18350 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
18360 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54  E, or DELETE.  T
18370 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72  he.** pEList cor
18380 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
18390 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
183a0 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55  SELECT and is NU
183b0 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  LL for.** other 
183c0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
183d0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63  * NameContexts c
183e0 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57  an be nested.  W
183f0 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  hen resolving na
18400 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d  mes, the inner-m
18410 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  ost .** context 
18420 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
18430 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
18440 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
18450 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
18460 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
18470 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
18480 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
18490 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
184a0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
184b0 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
184c0 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
184d0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
184e0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
184f0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
18500 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
18510 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
18520 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
18530 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
18540 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
18550 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20  is incremented. 
18560 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
18570 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
18580 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
18590 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
185a0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
185b0 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
185c0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
185d0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
185e0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
185f0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
18600 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
18610 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
18620 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
18630 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
18640 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
18650 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
18660 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
18670 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
18680 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
18690 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
186a0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
186b0 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
186c0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
186d0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
186e0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
186f0 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
18700 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
18710 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
18720 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
18730 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
18740 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
18750 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
18760 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
18770 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
18780 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
18790 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
187a0 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
187b0 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
187c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
187d0 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
187e0 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
187f0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
18800 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
18810 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18820 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
18830 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
18840 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
18850 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
18860 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
18870 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
18880 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
18890 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
188a0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
188b0 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
188c0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
188d0 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d  * Note:  NC_MinM
188e0 61 78 41 67 67 20 6d 75 73 74 20 68 61 76 65 20  axAgg must have 
188f0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61  the same value a
18900 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61  s SF_MinMaxAgg a
18910 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
18920 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f  C_MINMAX..** .*/
18930 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
18940 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
18950 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
18960 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
18970 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
18980 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
18990 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0002  /* One or 
189a0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
189b0 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
189c0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
189d0 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
189e0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
189f0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
18a00 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
18a10 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
18a20 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
18a30 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
18a40 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
18a50 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
18a60 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
18a70 64 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  dx   0x0010  /* 
18a80 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
18a90 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
18aa0 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
18ab0 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
18ac0 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
18ad0 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
18ae0 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
18af0 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ove */../*.** An
18b00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
18b10 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
18b20 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
18b30 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
18b40 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
18b50 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
18b60 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
18b70 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
18b80 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
18b90 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
18ba0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
18bb0 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
18bc0 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
18bd0 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
18be0 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
18bf0 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
18c00 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
18c10 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
18c20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
18c30 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
18c40 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
18c50 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
18c60 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
18c70 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
18c80 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
18c90 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
18ca0 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
18cb0 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
18cc0 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
18cd0 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
18ce0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
18cf0 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
18d00 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
18d10 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
18d20 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
18d30 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
18d40 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
18d50 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
18d60 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
18d70 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
18d80 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
18d90 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
18da0 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
18db0 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
18dc0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
18dd0 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
18de0 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
18df0 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
18e00 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
18e10 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
18e20 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
18e30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
18e40 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
18e50 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
18e60 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
18e70 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
18e80 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
18e90 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
18ea0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
18eb0 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
18ec0 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
18ed0 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
18ee0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
18ef0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
18f00 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
18f10 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
18f20 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
18f30 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
18f40 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
18f50 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
18f60 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
18f70 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
18f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
18f90 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
18fa0 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
18fb0 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
18fc0 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20    u16 selFlags; 
18fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
18fe0 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
18ff0 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
19000 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
19010 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
19020 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
19030 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
19040 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
19050 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
19060 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
19070 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
19080 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
19090 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
190a0 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
190b0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
190c0 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
190d0 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
190e0 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
190f0 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
19100 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
19110 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
19120 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
19130 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
19140 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
19150 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
19160 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
19170 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
19180 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
19190 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
191a0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
191b0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
191c0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
191d0 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
191e0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
191f0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
19200 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
19210 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
19220 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
19230 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
19240 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
19250 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
19260 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
19270 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
19280 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
19290 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
192a0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
192b0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
192c0 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
192d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
192e0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
192f0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
19300 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
19310 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
19320 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
19330 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
19340 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
19350 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
19360 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
19370 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
19380 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
19390 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
193a0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
193b0 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
193c0 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
193d0 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
193e0 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
193f0 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
19400 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
19410 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
19420 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
19430 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
19440 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
19450 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
19460 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
19470 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
19480 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
19490 64 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  d        0x0004 
194a0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
194b0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
194c0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
194d0 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
194e0 20 30 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74   0x0008  /* Cont
194f0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
19500 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
19510 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
19520 65 72 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f  eral   0x0010  /
19530 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
19540 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
19550 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
19560 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
19570 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0020  /* sqlite3
19580 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
19590 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
195a0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
195b0 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
195c0 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  40  /* FROM subq
195d0 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
195e0 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
195f0 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
19600 64 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20  d        0x0080 
19610 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
19620 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
19630 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
19640 73 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  s          0x010
19650 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
19660 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
19670 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
19680 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
19690 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69     0x0200  /* Si
196a0 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
196b0 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
196c0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
196d0 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
196e0 20 20 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72    0x0400  /* Par
196f0 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
19700 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
19710 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
19720 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30  aybeConvert    0
19730 78 30 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  x0800  /* Need c
19740 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
19750 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
19760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
19770 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
19780 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
19790 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
197a0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
197b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
197c0 72 73 69 76 65 20 20 20 20 20 20 20 30 78 32 30  rsive       0x20
197d0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
197e0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
197f0 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
19800 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
19810 72 74 65 64 20 20 20 20 20 20 20 30 78 34 30 30  rted       0x400
19820 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
19830 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
19840 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a  Subquery() */...
19850 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
19860 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
19870 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
19880 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
19890 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
198a0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
198b0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
198c0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
198d0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
198e0 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
198f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
19900 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
19910 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
19920 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
19930 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20   index .**      
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19950 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
19960 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
19970 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
19980 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
19990 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
199a0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
199b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
199c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
199d0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
199e0 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
199f0 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
19a00 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
19a10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19a20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
19a30 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
19a40 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
19a50 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
19a60 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
19a70 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
19a80 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
19a90 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
19aa0 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
19ab0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
19ac0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
19af0 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
19b00 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
19b10 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
19b20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
19b30 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
19b40 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
19b50 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
19b60 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
19b70 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
19b80 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
19b90 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
19ba0 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
19bb0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
19bc0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19bd0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
19be0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
19bf0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
19c00 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
19c10 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
19c20 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
19c30 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
19c40 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
19c60 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
19c70 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
19c80 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
19cb0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
19cc0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
19cd0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
19cf0 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
19d00 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
19d10 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
19d20 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
19d30 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
19d40 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
19d50 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
19d60 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
19d90 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
19da0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19db0 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  . .**           
19dc0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
19dd0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
19de0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
19df0 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
19e20 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
19e30 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
19e40 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
19e50 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
19e60 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
19e70 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19e80 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
19eb0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
19ec0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
19ed0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19ef0 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
19f00 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
19f10 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
19f40 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
19f50 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
19f60 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
19f70 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
19f80 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
19f90 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
19fa0 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
19fb0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
19fc0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
19fd0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
19ff0 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1a000 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1a010 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1a040 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1a050 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1a060 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1a090 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1a0a0 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1a0b0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1a0e0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1a0f0 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1a100 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1a110 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1a120 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1a130 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1a140 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1a150 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1a160 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1a170 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1a180 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a190 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1a1a0 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1a1b0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1a1c0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1a1d0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1a1e0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1a1f0 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1a200 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1a230 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1a240 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1a250 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1a260 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1a270 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1a280 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1a290 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1a2a0 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1a2b0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1a2c0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2e0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1a2f0 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1a300 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1a310 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a330 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1a340 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1a350 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1a360 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1a370 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1a380 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1a390 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1a3a0 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1a3c0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1a3d0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1a3e0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1a3f0 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1a410 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1a420 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1a430 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1a440 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1a450 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1a460 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1a490 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1a4a0 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1a4b0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1a4d0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1a4e0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1a4f0 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1a500 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1a510 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1a520 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1a530 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1a540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a550 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1a560 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1a570 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1a580 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a590 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1a5a0 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1a5b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1a5c0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1a5d0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1a5e0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1a5f0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1a600 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1a610 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1a620 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1a630 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1a640 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1a650 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1a660 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1a670 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1a680 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1a690 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1a6a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1a6b0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1a6c0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1a6d0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1a6e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1a6f0 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1a700 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1a710 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1a720 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1a730 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1a740 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1a750 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1a760 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1a770 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1a780 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1a790 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1a7a0 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1a7b0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1a7c0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1a7d0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1a7e0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1a7f0 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1a800 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1a810 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1a820 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1a830 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1a840 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1a850 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1a860 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1a870 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1a880 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1a890 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1a8a0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1a8b0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1a8c0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1a8d0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1a8e0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1a8f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1a900 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1a910 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1a920 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1a930 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1a940 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1a950 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1a960 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1a970 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1a980 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1a990 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a9a0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1a9b0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1a9c0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1a9d0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1a9e0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1a9f0 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1aa00 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1aa10 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1aa20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1aa30 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1aa40 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1aa50 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1aa60 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1aa70 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1aa80 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1aa90 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1aaa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1aab0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1aac0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1aad0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1aae0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1aaf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1ab00 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1ab10 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1ab20 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1ab30 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1ab40 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1ab50 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1ab60 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1ab70 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1ab80 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1ab90 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1aba0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
1abb0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1abc0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1abd0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1abe0 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1abf0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1ac00 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1ac10 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1ac20 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1ac30 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1ac40 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1ac50 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1ac60 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1ac70 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1ac80 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1ac90 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1aca0 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1acb0 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
1acc0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1acd0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1ace0 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1acf0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1ad00 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1ad10 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1ad20 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1ad30 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1ad40 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1ad50 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1ad60 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1ad70 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1ad80 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1ad90 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1ada0 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1adb0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1adc0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1add0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1ade0 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1adf0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1ae00 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1ae10 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1ae20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1ae30 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1ae40 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1ae50 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1ae60 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1ae70 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1ae80 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
1ae90 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
1aea0 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
1aeb0 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
1aec0 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
1aed0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
1aee0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1aef0 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1af00 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1af10 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1af20 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1af30 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
1af40 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1af50 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1af60 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1af70 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1af80 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1af90 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1afa0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1afb0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1afc0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1afd0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1afe0 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1aff0 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1b000 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1b010 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1b020 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1b030 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1b040 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1b050 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1b060 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1b070 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1b080 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1b090 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1b0a0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1b0b0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1b0c0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1b0d0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1b0e0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1b0f0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1b100 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1b110 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1b120 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1b130 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1b140 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1b150 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1b160 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1b170 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1b180 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1b190 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1b1a0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1b1b0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1b1c0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1b1d0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1b1e0 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
1b1f0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1b200 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1b210 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1b220 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1b230 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1b240 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1b250 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1b260 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1b270 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1b280 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1b290 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1b2a0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1b2b0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1b2c0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1b2d0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1b2e0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1b2f0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1b300 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1b310 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1b320 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1b330 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1b340 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1b350 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1b360 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1b370 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1b380 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1b390 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1b3a0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1b3b0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1b3c0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1b3d0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1b3e0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1b3f0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1b400 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1b410 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1b420 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1b430 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1b440 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1b450 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1b460 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1b470 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1b480 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1b490 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1b4a0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1b4b0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1b4c0 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1b4d0 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1b4e0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1b4f0 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1b500 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1b510 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1b520 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1b530 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1b540 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1b550 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1b560 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1b570 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1b580 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1b590 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1b5a0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1b5b0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1b5c0 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1b5d0 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1b5e0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1b5f0 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1b600 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1b610 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1b620 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1b630 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1b640 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1b650 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1b660 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1b670 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1b680 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1b690 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1b6a0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1b6b0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1b6c0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1b6d0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1b6e0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1b6f0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1b700 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1b710 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1b720 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1b730 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1b740 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1b750 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1b760 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1b770 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1b780 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1b790 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1b7a0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1b7b0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1b7c0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1b7d0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1b7e0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1b7f0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1b800 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1b810 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1b820 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1b830 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1b840 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1b850 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1b860 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1b870 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1b880 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
1b890 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1b8a0 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1b8b0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1b8c0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1b8d0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1b8e0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1b8f0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1b900 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1b910 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1b920 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1b930 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1b940 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1b950 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1b960 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1b970 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1b980 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1b990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1b9a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1b9b0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1b9c0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1b9d0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1b9e0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1b9f0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1ba00 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1ba10 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1ba20 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1ba30 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1ba40 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1ba50 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1ba60 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1ba70 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1ba80 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1ba90 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1baa0 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1bab0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1bac0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1bad0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1bae0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1baf0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1bb00 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1bb10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bb20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1bb30 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1bb40 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1bb50 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1bb60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bb70 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1bb80 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1bb90 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1bba0 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1bbb0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1bbc0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1bbd0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1bbe0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1bbf0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1bc00 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1bc10 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1bc20 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1bc30 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1bc40 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1bc50 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1bc60 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1bc70 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1bc80 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1bc90 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1bca0 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1bcb0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  stants */.  int 
1bcc0 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
1bcd0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
1bce0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
1bcf0 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
1bd00 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1bd10 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1bd20 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1bd30 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1bd40 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1bd50 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1bd60 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1bd70 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1bd80 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1bd90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bda0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1bdb0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1bdc0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1bdd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1bde0 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1bdf0 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1be00 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1be10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1be20 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1be30 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1be40 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
1be50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1be60 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
1be70 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1be80 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
1be90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
1bea0 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
1beb0 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
1bec0 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1bed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bee0 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1bef0 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1bf00 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f  */.  int iFixedO
1bf10 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76  p;        /* Nev
1bf20 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f  er back out opco
1bf30 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f  des iFixedOp-1 o
1bf40 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69  r earlier */.  i
1bf50 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
1bf60 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1bf70 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
1bf80 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
1bf90 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
1bfa0 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20  PartIdxTab;     
1bfb0 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70  /* Table corresp
1bfc0 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74  onding to a part
1bfd0 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ial index */.  i
1bfe0 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
1bff0 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
1c000 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
1c010 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
1c020 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
1c030 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
1c040 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1c050 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
1c060 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
1c070 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1c080 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
1c090 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1c0a0 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20  abels used */.  
1c0b0 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
1c0c0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f       /* Space to
1c0d0 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73   hold the labels
1c0e0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
1c0f0 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
1c100 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
1c110 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
1c120 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1c130 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   i16 iColumn;   
1c140 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1c150 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
1c160 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
1c170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
1c180 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
1c190 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
1c1a0 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
1c1b0 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
1c1c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
1c1d0 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
1c1e0 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
1c1f0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
1c200 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
1c210 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
1c220 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
1c230 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
1c240 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
1c250 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
1c260 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
1c270 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
1c280 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
1c290 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
1c2a0 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
1c2b0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
1c2c0 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  y */.  ExprList 
1c2d0 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
1c2e0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1c2f0 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
1c300 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
1c310 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1c320 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
1c330 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
1c340 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
1c350 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
1c360 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
1c370 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
1c380 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
1c390 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
1c3a0 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
1c3b0 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
1c3c0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1c3d0 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b  int cookieValue[
1c3e0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1c3f0 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75  HED+2];  /* Valu
1c400 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f  es of cookies to
1c410 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74   verify */.  int
1c420 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1c430 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1c440 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1c450 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1c460 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1c470 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1c480 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1c490 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1c4a0 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1c4b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1c4c0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1c4d0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1c4e0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1c4f0 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1c500 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1c510 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1c520 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1c530 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1c540 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1c550 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1c560 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1c570 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1c580 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1c590 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1c5a0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1c5b0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1c5c0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1c5d0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1c5e0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1c5f0 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1c600 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1c610 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1c620 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1c630 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1c640 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1c650 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1c660 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1c670 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1c680 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1c690 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
1c6a0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
1c6b0 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
1c6c0 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
1c6d0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
1c6e0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
1c6f0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
1c700 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
1c710 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
1c720 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
1c730 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
1c740 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1c750 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
1c760 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
1c770 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
1c780 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1c790 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
1c7a0 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
1c7b0 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
1c7c0 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
1c7d0 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
1c7e0 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
1c7f0 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
1c800 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1c810 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1c820 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1c830 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
1c840 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1c850 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1c860 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1c870 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
1c880 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
1c890 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
1c8a0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
1c8b0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
1c8c0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1c8d0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1c8e0 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
1c8f0 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
1c900 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
1c910 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
1c920 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
1c930 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1c940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1c980 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1c990 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1c9a0 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1c9b0 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1c9c0 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1c9d0 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1c9e0 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1c9f0 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1ca00 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1ca10 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
1ca20 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61  fsetof(Parse,nVa
1ca30 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66  r) so the nVar f
1ca40 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
1ca50 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a   first field.  *
1ca60 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  * in the recursi
1ca70 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
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 2a  ****************
1caa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cac0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56  *****/..  int nV
1cad0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1cae0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1caf0 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
1cb00 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
1cb10 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1cb20 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1cb30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1cb40 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
1cb50 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
1cb60 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
1cb70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
1cb80 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
1cb90 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1cba0 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65 65  EY */.  u8 bFree
1cbb0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1cbc0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57 69    /* True if pWi
1cbd0 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65  th should be fre
1cbe0 65 64 20 77 69 74 68 20 70 61 72 73 65 72 20 2a  ed with parser *
1cbf0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cc10 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
1cc20 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
1cc30 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
1cc40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1cc50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1cc60 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
1cc70 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
1cc80 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
1cc90 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
1cca0 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
1ccb0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
1ccc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ccd0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
1cce0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
1ccf0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69  endif.  int nAli
1cd00 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
1cd10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1cd20 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65  liased result se
1cd30 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
1cd40 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
1cd50 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
1cd60 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
1cd70 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
1cd80 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
1cd90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cda0 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
1cdb0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1cdc0 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
1cdd0 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
1cde0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1cdf0 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
1ce00 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
1ce10 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
1ce20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
1ce30 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1ce40 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a  #endif.  char **
1ce50 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  azVar;          
1ce60 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74     /* Pointers t
1ce70 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d  o names of param
1ce80 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  eters */.  Vdbe 
1ce90 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
1cea0 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
1ceb0 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
1cec0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
1ced0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1cee0 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
1cef0 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
1cf00 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
1cf10 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
1cf20 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
1cf30 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
1cf40 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
1cf50 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
1cf60 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1cf70 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
1cf80 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
1cf90 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
1cfa0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
1cfb0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
1cfc0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
1cfd0 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
1cfe0 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
1cff0 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
1d000 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
1d010 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
1d020 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
1d030 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
1d040 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
1d050 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
1d060 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1d070 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
1d080 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
1d090 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1d0a0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
1d0b0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
1d0c0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
1d0d0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
1d0e0 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
1d0f0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
1d100 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
1d110 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
1d120 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
1d130 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
1d140 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
1d150 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
1d160 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
1d170 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
1d180 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
1d190 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
1d1a0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
1d1b0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
1d1c0 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
1d1d0 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
1d1e0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1d1f0 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
1d200 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
1d210 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65   */.};../*.** Re
1d220 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
1d230 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
1d240 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1d250 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
1d260 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1d270 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1d280 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
1d290 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
1d2a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
1d2b0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
1d2c0 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61  arse->declareVta
1d2d0 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  b).#endif../*.**
1d2e0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1d2f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1d300 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64  ructure can be d
1d310 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61  eclared on a sta
1d320 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ck and used.** t
1d330 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65  o save the Parse
1d340 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61  .zAuthContext va
1d350 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  lue so that it c
1d360 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c  an be restored l
1d370 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ater..*/.struct 
1d380 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20  AuthContext {.  
1d390 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
1d3a0 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50  hContext;   /* P
1d3b0 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a  ut saved Parse.z
1d3c0 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65  AuthContext here
1d3d0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1d3e0 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1d3f0 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73    /* The Parse s
1d400 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a  tructure */.};..
1d410 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66  /*.** Bitfield f
1d420 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75  lags for P5 valu
1d430 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63  e in various opc
1d440 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
1d450 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1d460 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1d470 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1d480 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64  b->nChange */.#d
1d490 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
1d4a0 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
1d4b0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
1d4c0 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
1d4d0 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
1d4e0 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
1d4f0 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20  WID     0x02    
1d500 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
1d510 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
1d520 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d530 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
1d540 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
1d550 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
1d560 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
1d570 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
1d580 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
1d590 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
1d5a0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
1d5b0 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
1d5c0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
1d5d0 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
1d5e0 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
1d5f0 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
1d600 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
1d610 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
1d620 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
1d630 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1d640 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
1d650 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d660 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
1d670 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
1d680 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1d690 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
1d6a0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
1d6b0 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
1d6c0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1d6d0 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
1d6e0 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
1d6f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b  fine OPFLAG_SEEK
1d700 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20  EQ        0x02  
1d710 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63    /* OP_Open** c
1d720 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65  ursor uses EQ se
1d730 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ek only */.#defi
1d740 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
1d750 47 20 20 20 20 20 20 20 30 78 30 34 20 20 20 20  G       0x04    
1d760 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
1d770 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
1d780 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
1d790 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
1d7a0 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
1d7b0 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
1d7c0 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
1d7d0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  on */../*. * Eac
1d7e0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
1d7f0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1d800 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
1d810 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
1d820 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
1d830 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
1d840 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
1d850 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1d860 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
1d870 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
1d880 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
1d890 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
1d8a0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
1d8b0 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
1d8c0 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
1d8d0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
1d8e0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
1d8f0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
1d900 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
1d910 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
1d920 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
1d930 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
1d940 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
1d950 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
1d960 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
1d970 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
1d980 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
1d990 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
1d9a0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1d9b0 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
1d9c0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
1d9d0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
1d9e0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
1d9f0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
1da00 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
1da10 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
1da20 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
1da30 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1da40 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
1da50 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
1da60 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
1da70 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
1da80 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
1da90 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
1daa0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
1dab0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1dac0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1dad0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
1dae0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
1daf0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1db00 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
1db10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
1db20 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
1db30 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
1db40 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
1db50 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1db60 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1db70 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1db80 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1db90 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
1dba0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
1dbb0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1dbc0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
1dbd0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
1dbe0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
1dbf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1dc00 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
1dc10 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1dc20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
1dc30 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
1dc40 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
1dc50 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
1dc60 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
1dc70 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc90 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
1dca0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
1dcb0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1dcc0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1dcd0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
1dce0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1dcf0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
1dd00 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
1dd10 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
1dd20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1dd30 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
1dd40 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
1dd50 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
1dd60 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
1dd70 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
1dd80 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
1dd90 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1dda0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
1ddb0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1ddc0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
1ddd0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
1dde0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
1ddf0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
1de00 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
1de10 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
1de20 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
1de30 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
1de40 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
1de50 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
1de60 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
1de70 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
1de80 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
1de90 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
1dea0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
1deb0 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
1dec0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
1ded0 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
1dee0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1def0 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
1df00 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1df10 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1df20 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
1df30 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
1df40 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
1df50 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
1df60 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
1df70 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
1df80 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1df90 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
1dfa0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
1dfb0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
1dfc0 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
1dfd0 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
1dfe0 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
1dff0 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
1e000 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
1e010 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
1e020 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
1e030 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
1e040 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
1e050 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
1e060 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
1e070 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
1e080 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
1e090 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
1e0a0 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
1e0b0 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
1e0c0 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
1e0d0 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
1e0e0 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
1e0f0 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
1e100 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
1e110 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
1e120 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
1e130 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
1e140 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
1e150 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
1e160 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
1e170 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
1e180 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
1e190 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
1e1a0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1e1b0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
1e1c0 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
1e1d0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1e1e0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1e1f0 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
1e200 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
1e210 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
1e220 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
1e230 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
1e240 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1e250 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1e260 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1e270 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1e280 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1e290 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1e2a0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1e2c0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1e2d0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1e2e0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1e2f0 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1e300 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1e310 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1e320 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1e330 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1e340 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1e350 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1e360 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1e370 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1e390 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1e3a0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1e3b0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
1e3c0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
1e3d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1e3e0 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
1e3f0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1e400 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1e410 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
1e420 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1e430 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1e450 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1e460 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
1e470 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
1e480 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
1e490 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1e4a0 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
1e4b0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1e4c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1e4d0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1e4e0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1e4f0 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1e500 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1e510 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
1e520 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
1e530 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1e540 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
1e550 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
1e560 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
1e570 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
1e580 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
1e590 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
1e5a0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
1e5b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e5c0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
1e5d0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1e5e0 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e600 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1e610 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1e620 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1e630 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
1e640 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
1e650 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
1e660 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
1e670 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
1e680 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
1e690 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
1e6a0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
1e6b0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1e6c0 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
1e6d0 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
1e6e0 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
1e6f0 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
1e700 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
1e710 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
1e720 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
1e730 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
1e740 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1e750 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1e760 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
1e770 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1e780 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
1e790 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
1e7a0 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
1e7b0 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
1e7c0 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
1e7d0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
1e7e0 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
1e7f0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1e800 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
1e810 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
1e820 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1e830 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
1e840 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
1e850 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
1e860 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
1e870 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1e880 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1e890 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
1e8a0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
1e8b0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
1e8c0 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
1e8d0 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
1e8e0 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
1e8f0 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
1e900 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
1e910 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66  it.  .*/.typedef
1e920 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
1e930 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
1e940 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
1e950 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1e960 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
1e970 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
1e980 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
1e990 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1e9a0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a   *pSchema;    /*
1e9b0 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68   Fix items to th
1e9c0 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
1e9d0 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20  nt bVarOnly;    
1e9e0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
1e9f0 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
1ea00 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f  ces only */.  co
1ea10 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
1ea20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
1ea30 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63  ll objects are c
1ea40 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73  ontained in this
1ea50 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
1ea60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
1ea70 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68  ;  /* Type of th
1ea80 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
1ea90 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
1eaa0 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  sages */.  const
1eab0 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f   Token *pName; /
1eac0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1ead0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1eae0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1eaf0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
1eb00 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20  n objected used 
1eb10 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68  to accumulate th
1eb20 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69  e text of a stri
1eb30 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64  ng where we.** d
1eb40 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
1eb50 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74  y know how big t
1eb60 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62  he string will b
1eb70 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  e in the end..*/
1eb80 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d  .struct StrAccum
1eb90 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1eba0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
1ebb0 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
1ebc0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
1ebd0 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
1ebe0 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20  char *zBase;    
1ebf0 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61       /* A base a
1ec00 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20  llocation.  Not 
1ec10 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a  from malloc. */.
1ec20 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20    char *zText;  
1ec30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74         /* The st
1ec40 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73  ring collected s
1ec50 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1ec60 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20  nChar;          
1ec70 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65  /* Length of the
1ec80 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a   string so far *
1ec90 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b  /.  int  nAlloc;
1eca0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
1ecb0 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
1ecc0 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
1ecd0 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63  /.  int  mxAlloc
1ece0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
1ecf0 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
1ed00 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
1ed10 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
1ed20 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
1ed30 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
1ed40 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
1ed50 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
1ed60 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
1ed70 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
1ed80 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1ed90 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a  TOOBIG  2../*.**
1eda0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1edb0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1edc0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1edd0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1ede0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1edf0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1ee00 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1ee10 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1ee20 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1ee30 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1ee40 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1ee50 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1ee60 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1ee70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1ee80 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1ee90 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1eea0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1eeb0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1eec0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1eed0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1eee0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1eef0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1ef00 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1ef10 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1ef20 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1ef30 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1ef40 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1ef50 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1ef60 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1ef70 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1ef80 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1ef90 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1efa0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1efb0 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1efc0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1efd0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1efe0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1f010 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1f020 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1f030 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1f040 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1f050 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1f060 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1f070 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f090 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1f0a0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1f0b0 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f0e0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1f0f0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1f100 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1f130 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1f140 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1f150 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1f180 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1f190 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
1f1c0 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
1f1d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
1f1e0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1f1f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1f200 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1f210 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
1f220 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1f250 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
1f260 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  unt */.  sqlite3
1f270 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
1f280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1f290 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
1f2a0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
1f2b0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1f2c0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
1f2d0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
1f2e0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
1f2f0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1f300 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
1f310 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
1f320 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
1f330 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
1f340 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
1f350 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1f360 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
1f370 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
1f380 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1f3b0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
1f3c0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f3e0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
1f3f0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
1f400 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
1f410 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
1f420 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
1f430 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1f440 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
1f450 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
1f460 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1f470 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
1f480 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
1f490 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1f4c0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1f4d0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1f4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1f4f0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1f500 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1f510 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1f540 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1f550 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1f580 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1f590 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1f5c0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1f5d0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f600 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1f610 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1f620 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1f630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1f640 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1f650 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1f660 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1f670 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1f680 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1f690 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1f6a0 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1f6b0 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20    u32 szPma;    
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53      /* Maximum S
1f6e0 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a  orter PMA size *
1f6f0 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
1f700 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
1f710 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
1f720 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
1f730 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
1f740 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
1f750 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
1f760 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
1f770 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f780 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f790 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
1f7a0 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
1f7b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
1f7c0 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
1f7d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f7e0 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
1f7f0 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
1f800 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
1f810 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
1f820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f830 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
1f840 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
1f850 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
1f860 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
1f870 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1f880 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1f890 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1f8a0 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
1f8b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f8c0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1f8d0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1f8e0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  lized */.  int n
1f8f0 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f910 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
1f920 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
1f930 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1f940 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
1f950 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
1f960 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
1f970 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
1f980 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
1f990 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
1f9a0 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
1f9b0 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
1f9c0 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1f9f0 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
1fa00 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
1fa10 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
1fa20 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
1fa30 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
1fa40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1fa50 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
1fa60 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
1fa70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44  #ifdef SQLITE_VD
1fa80 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a  BE_COVERAGE.  /*
1fa90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1faa0 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20  allback (if not 
1fab0 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64  NULL) is invoked
1fac0 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62   on every VDBE b
1fad0 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61  ranch.  ** opera
1fae0 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63  tion.  Set the c
1faf0 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51  allback using SQ
1fb00 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44  LITE_TESTCTRL_VD
1fb10 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a  BE_COVERAGE..  *
1fb20 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65  /.  void (*xVdbe
1fb30 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e  Branch)(void*,in
1fb40 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54  t iSrcLine,u8 eT
1fb50 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a  his,u8 eMx);  /*
1fb60 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   Callback */.  v
1fb70 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68  oid *pVdbeBranch
1fb80 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
1fbb0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64  argument */.#end
1fbc0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1fbd0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
1fbe0 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  EST.  int (*xTes
1fbf0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
1fc00 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
1fc10 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
1fc20 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
1fc30 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
1fc40 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
1fc50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1fc60 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
1fc70 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f  ) calls */.};../
1fc80 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
1fc90 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
1fca0 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
1fcb0 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74  ments to indicat
1fcc0 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73  e that.** the as
1fcd0 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c  sert is only val
1fce0 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  id on a well-for
1fcf0 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49  med database.  I
1fd00 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a  nstead of:.**.**
1fd10 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29       assert( X )
1fd20 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74  ;.**.** One writ
1fd30 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  es:.**.**     as
1fd40 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55  sert( X || CORRU
1fd50 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43  PT_DB );.**.** C
1fd60 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75  ORRUPT_DB is tru
1fd70 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20  e during normal 
1fd80 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52  operation.  CORR
1fd90 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20  UPT_DB does not 
1fda0 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74  indicate.** that
1fdb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
1fdc0 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72   definitely corr
1fdd0 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69  upt, only that i
1fde0 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75  t might be corru
1fdf0 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20  pt..** For most 
1fe00 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52  test cases, CORR
1fe10 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f  UPT_DB is set to
1fe20 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73   false using a s
1fe30 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65  pecial.** sqlite
1fe40 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29  3_test_control()
1fe50 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20  .  This enables 
1fe60 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1fe70 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20  nts to prove.** 
1fe80 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  things that are 
1fe90 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20  always true for 
1fea0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
1feb0 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bases..*/.#defin
1fec0 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73  e CORRUPT_DB  (s
1fed0 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76  qlite3Config.nev
1fee0 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f  erCorrupt==0)../
1fef0 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
1ff00 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
1ff10 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
1ff20 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
1ff30 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74  t Walker {.  int
1ff40 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
1ff50 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
1ff60 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
1ff70 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
1ff80 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
1ff90 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
1ffa0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1ffb0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1ffc0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76  r SELECTs */.  v
1ffd0 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  oid (*xSelectCal
1ffe0 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c  lback2)(Walker*,
1fff0 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f  Select*);/* Seco
20000 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  nd callback for 
20010 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72  SELECTs */.  Par
20020 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
20050 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
20060 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20090 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
200a0 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b  s */.  u8 eCode;
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63   /* A small proc
200e0 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20  essing code */. 
200f0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
20120 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
20130 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
20140 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20160 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
20170 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
20180 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
201b0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
201c0 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
201f0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
20200 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
20210 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20230 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
20240 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
20250 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
20260 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20270 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
20280 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
20290 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
202a0 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
202b0 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
202c0 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
202d0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
202e0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
202f0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
20300 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
20310 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
20320 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20340 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
20350 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
20360 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20370 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
20380 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
20390 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
203a0 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
203b0 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
203c0 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
203d0 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
203e0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
203f0 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
20400 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
20410 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
20420 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
20430 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
20440 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
20450 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
20460 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
20470 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
20480 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
20490 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
204a0 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lk */../*.** An 
204b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
204c0 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65   structure repre
204d0 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f  sents a set of o
204e0 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a  ne or more CTEs.
204f0 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ** (common table
20500 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72   expressions) cr
20510 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c  eated by a singl
20520 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a  e WITH clause..*
20530 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a  /.struct With {.
20540 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20    int nCte;     
20550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20560 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43    /* Number of C
20570 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20  TEs in the WITH 
20580 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68  clause */.  With
20590 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20   *pOuter;       
205a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
205b0 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63  ontaining WITH c
205c0 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
205d0 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b  /.  struct Cte {
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
20600 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20  CTE in the WITH 
20610 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20  clause.... */.  
20620 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
20650 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70  s CTE */.    Exp
20660 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20  rList *pCols;   
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20680 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74  List of explicit
20690 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f   column names, o
206a0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65  r NULL */.    Se
206b0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
206d0 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
206e0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
206f0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
20700 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20  CteErr;         
20710 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
20720 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72  age for circular
20730 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
20740 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66   } a[1];.};..#if
20750 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20760 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
20770 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69  ce of the TreeVi
20780 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65  ew object is use
20790 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74  d for printing t
207a0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
207b0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
207c0 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67   on sqlite3Debug
207d0 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61  Printf() using a
207e0 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e   tree-like view.
207f0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56  .*/.struct TreeV
20800 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76  iew {.  int iLev
20810 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
20820 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f  /* Which level o
20830 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72  f the tree we ar
20840 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c  e on */.  u8  bL
20850 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20  ine[100];       
20860 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63    /* Draw vertic
20870 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69  al in column i i
20880 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72  f bLine[i] is tr
20890 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20  ue */.};.#endif 
208a0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
208b0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  */../*.** Assumi
208c0 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
208d0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
208e0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
208f0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
20900 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
20910 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
20920 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
20930 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
20940 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
20950 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
20980 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
20990 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
209a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209b0 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
209c0 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
209d0 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
209e0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
20a30 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
20a40 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
20a50 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
20a60 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
20a70 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
20a80 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
20a90 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
20aa0 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
20ab0 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
20ac0 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
20ad0 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
20ae0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
20af0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
20b00 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
20b10 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
20b20 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
20b30 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
20b40 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
20b50 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
20b60 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
20b70 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
20b80 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
20b90 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
20ba0 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
20bb0 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
20bc0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
20bd0 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
20be0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
20bf0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
20c00 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
20c10 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
20c20 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
20c30 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
20c40 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
20c50 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
20c60 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a  (__LINE__).../*.
20c70 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
20c80 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
20c90 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
20ca0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
20cb0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
20cc0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
20cd0 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
20ce0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
20cf0 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
20d00 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
20d10 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
20d20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
20d30 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
20d40 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
20d50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
20d60 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
20d70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
20d80 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
20d90 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
20da0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
20db0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
20dc0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
20dd0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
20de0 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
20df0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
20e00 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
20e10 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
20e20 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
20e30 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20e40 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
20e50 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
20e60 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
20e70 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
20e80 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
20e90 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
20ea0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
20eb0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
20ec0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
20ed0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
20ee0 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
20ef0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
20f00 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
20f10 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
20f20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
20f30 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
20f40 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
20f50 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
20f60 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
20f70 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
20f80 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
20f90 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
20fa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
20fb0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
20fc0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20fd0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20fe0 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
20ff0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
21000 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
21010 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
21020 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
21030 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
21040 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
21050 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
21060 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21070 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
21080 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
21090 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
210a0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
210b0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
210c0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
210d0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
210e0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
210f0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21100 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
21110 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
21120 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
21130 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
21140 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
21150 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
21160 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
21170 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
21180 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
21190 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
211a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
211b0 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
211c0 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
211d0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
211e0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
211f0 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
21200 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21210 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
21220 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
21230 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
21240 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
21250 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
21260 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
21270 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
21280 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
21290 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
212a0 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
212b0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
212c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
212d0 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
212e0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
212f0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
21300 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
21310 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
21320 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
21330 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
21340 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
21350 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
21360 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43  int sqlite3IsIdC
21370 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a  har(u8);.#endif.
21380 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
21390 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
213a0 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73  pes.*/.#define s
213b0 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71  qlite3StrICmp sq
213c0 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e  lite3_stricmp.in
213d0 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
213e0 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
213f0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
21400 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
21410 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
21420 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
21430 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
21440 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
21450 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
21460 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
21470 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
21480 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
21490 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
214a0 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
214b0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
214c0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
214d0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
214e0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
214f0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
21500 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
21510 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
21520 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
21530 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
21540 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
21550 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
21560 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
21570 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
21580 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
21590 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
215a0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
215b0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
215c0 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
215d0 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
215e0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
215f0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
21600 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
21610 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
21620 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
21630 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
21640 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
21650 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21660 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
21670 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
21680 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
21690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
216a0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
216b0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
216c0 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
216d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
216e0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
216f0 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  T.void sqlite3Be
21700 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
21710 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
21720 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
21730 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
21740 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
21750 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
21760 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
21770 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
21780 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
21790 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
217a0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
217b0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
217c0 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
217d0 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
217e0 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
217f0 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
21800 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
21810 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
21820 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
21830 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
21840 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
21850 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
21860 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
21870 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
21880 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
21890 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
218a0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
218b0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
218c0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
218d0 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
218e0 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
218f0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21900 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
21910 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
21920 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
21930 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
21940 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23  )       .#else.#
21950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
21960 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
21970 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
21980 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
21990 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
219a0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
219b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
219c0 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
219d0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
219e0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
219f0 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
21a00 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
21a10 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
21a20 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
21a30 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
21a40 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
21a50 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
21a60 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
21a70 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
21a80 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
21a90 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
21aa0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
21ab0 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  5(void);.#endif.
21ac0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
21ad0 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
21ae0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
21af0 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
21b00 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
21b10 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
21b20 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
21b30 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
21b40 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
21b50 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
21b60 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
21b70 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
21b80 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
21b90 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
21ba0 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
21bb0 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
21bc0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
21bd0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
21be0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
21bf0 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
21c00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
21c10 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
21c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
21c30 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
21c40 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
21c50 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
21c60 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
21c70 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
21c80 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
21c90 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
21ca0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
21cb0 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
21cc0 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66  (void);..#ifndef
21cd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
21ce0 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
21cf0 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64  t sqlite3IsNaN(d
21d00 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20  ouble);.#else.# 
21d10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21d20 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
21d30 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
21d40 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
21d50 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
21d60 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
21d70 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75   about SQL.** fu
21d80 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74  nctions argument
21d90 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70  s that are the p
21da0 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65  arameters to the
21db0 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
21dc0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72  on..*/.struct Pr
21dd0 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a  intfArguments {.
21de0 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
21df0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
21e00 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
21e10 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
21e20 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20   nUsed;         
21e30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21e40 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65  of arguments use
21e50 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71  d so far */.  sq
21e60 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
21e70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72  Arg;   /* The ar
21e80 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f  gument values */
21e90 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c  .};..#define SQL
21ea0 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
21eb0 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65  NAL 0x01.#define
21ec0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
21ed0 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69  QLFUNC  0x02.voi
21ee0 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
21ef0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32  f(StrAccum*, u32
21f00 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
21f10 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
21f20 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
21f30 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e  Accum*, u32, con
21f40 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
21f50 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
21f60 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
21f70 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21f80 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
21f90 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
21fa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
21fb0 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
21fc0 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
21fd0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
21fe0 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
21ff0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
22000 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
22010 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
22020 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
22030 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
22040 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
22050 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
22060 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
22070 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
22080 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
22090 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
220a0 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
220b0 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
220c0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
220d0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
220e0 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
220f0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
22100 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
22110 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
22120 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
22130 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
22140 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e  elect*, u8);.#en
22150 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
22160 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
22170 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
22180 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22190 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
221a0 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
221b0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
221c0 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
221d0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
221e0 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
221f0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
22200 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
22210 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
22220 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
22230 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
22240 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
22250 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
22260 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
22270 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
22280 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
22290 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
222a0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
222b0 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
222c0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
222d0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
222e0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
222f0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
22300 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
22310 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
22320 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
22330 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
22340 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
22350 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
22360 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
22370 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
22380 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22390 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
223a0 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
223b0 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
223c0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
223d0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
223e0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
223f0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
22400 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
22410 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
22420 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
22430 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
22440 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
22450 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
22460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22470 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
22480 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
22490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
224a0 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
224b0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
224c0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
224d0 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
224e0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
224f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22500 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
22510 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
22520 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22530 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
22540 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22550 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
22560 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
22570 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
22580 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
22590 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
225a0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
225b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
225c0 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69  List*);.u32 sqli
225d0 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73  te3ExprListFlags
225e0 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a  (const ExprList*
225f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
22600 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
22610 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
22620 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
22630 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
22640 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
22650 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
22660 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
22670 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
22680 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
22690 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
226a0 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  nection(sqlite3*
226b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
226c0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71  esetOneSchema(sq
226d0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
226e0 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73  d sqlite3Collaps
226f0 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73  eDatabaseArray(s
22700 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
22710 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65  qlite3BeginParse
22720 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
22730 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
22740 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
22750 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
22760 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
22770 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
22780 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
22790 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
227a0 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
227b0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
227c0 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65  Column**);.Table
227d0 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
227e0 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
227f0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
22800 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
22810 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
22820 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
22830 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
22840 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
22850 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
22860 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
22870 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
22880 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
22890 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
228a0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
228b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
228c0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
228d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
228e0 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
228f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
22900 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
22910 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
22920 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
22930 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22940 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
22950 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
22960 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22970 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54  qlite3AddColumnT
22980 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ype(Parse*,Token
22990 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
229a0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
229b0 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
229c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
229d0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
229e0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
229f0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
22a00 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
22a10 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
22a20 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
22a30 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
22a40 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
22a50 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
22a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a70 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
22a80 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
22a90 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
22aa0 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
22ab0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
22ac0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
22ad0 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65  e3CodeOnce(Parse
22ae0 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
22af0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22b00 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73  _TEST.# define s
22b10 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
22b20 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
22b30 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
22b40 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
22b50 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
22b60 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
22b70 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
22b80 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
22b90 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
22ba0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
22bb0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
22bc0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
22bd0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
22be0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
22bf0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
22c00 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
22c10 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
22c20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
22c30 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
22c40 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
22c50 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
22c60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22c70 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
22c80 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
22c90 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
22ca0 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
22cb0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
22cc0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
22cd0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
22ce0 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
22cf0 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
22d00 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
22d10 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
22d20 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
22d30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
22d40 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
22d50 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
22d60 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
22d70 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
22d80 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
22d90 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
22da0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
22db0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
22dc0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
22dd0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
22de0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22df0 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
22e00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22e10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
22e20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
22e30 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
22e40 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
22e50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22e60 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
22e70 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
22e80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
22e90 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
22ea0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
22eb0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
22ec0 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
22ed0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
22ee0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
22ef0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
22f00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22f10 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
22f20 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22f30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22f40 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
22f50 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
22f60 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
22f70 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
22f80 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
22f90 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
22fa0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
22fb0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
22fc0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22fd0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
22fe0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
22ff0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
23000 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
23010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23020 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
23030 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
23040 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
23050 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23060 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
23070 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
23080 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
23090 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
230a0 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
230b0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
230c0 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
230d0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
230e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
230f0 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
23100 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
23110 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
23120 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
23130 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
23140 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
23150 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
23160 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
23170 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
23180 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
23190 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
231a0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
231b0 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
231c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
231d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
231e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23200 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
23210 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
23220 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
23230 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
23240 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
23250 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
23260 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23270 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
23280 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23290 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
232a0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
232b0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
232c0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
232d0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
232e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
232f0 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
23300 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
23310 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
23320 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
23330 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
23340 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
23350 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
23360 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
23370 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
23380 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
23390 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
233a0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
233b0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
233c0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
233d0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
233e0 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
233f0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23400 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
23410 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
23440 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23450 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
23460 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
23470 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
23480 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
23490 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
234a0 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
234b0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
234c0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
234d0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
234e0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
23510 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
23520 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
23530 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
23540 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
23550 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
23560 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
23570 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
23580 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
23590 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
235a0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
235b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
235c0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
235d0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
235e0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
235f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
23600 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
23610 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
23620 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
23630 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
23640 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
23650 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
23660 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
23670 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
23680 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
23690 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
236a0 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
236b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
236c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
236d0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
236e0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
236f0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
23700 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
23710 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
23720 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
23730 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
23740 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
23750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23760 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
23770 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
23780 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
23790 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
237a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
237b0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
237c0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
237d0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
237e0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
237f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
23800 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
23810 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
23820 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
23830 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
23840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
23850 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
23860 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
23870 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
23880 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
23890 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
238a0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
238b0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
238c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
238d0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
238e0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
238f0 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
23900 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
23910 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23920 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
23930 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
23940 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23950 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
23960 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
23970 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23980 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23990 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
239a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
239b0 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
239c0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
239d0 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65  3ExprCacheRemove
239e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
239f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23a00 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50  ExprCacheClear(P
23a10 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
23a20 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66  ite3ExprCacheAff
23a30 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73  inityChange(Pars
23a40 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
23a50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23a60 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
23a70 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23a80 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
23a90 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
23aa0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
23ab0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
23ac0 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
23ad0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  Expr*, int, u8);
23ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23af0 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
23b00 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
23b10 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
23b20 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
23b30 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
23b40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23b50 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
23b60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23b70 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23b80 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
23b90 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
23ba0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  nt, int, u8);.#d
23bb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
23bc0 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
23bd0 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
23be0 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
23bf0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
23c00 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
23c10 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
23c20 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
23c30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
23c40 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20  E_ECEL_REF      
23c50 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70  0x04  /* Use Exp
23c60 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
23c70 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
23c80 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
23c90 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
23ca0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23cb0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
23cc0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
23cd0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23ce0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
23cf0 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
23d00 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
23d10 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
23d20 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
23d30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
23d40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
23d50 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
23d60 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e  eTable(Parse*,in
23d70 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63  t isView,const c
23d80 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23d90 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23da0 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
23db0 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  m(Parse*,int isV
23dc0 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69  iew,struct SrcLi
23dd0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
23de0 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
23df0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
23e00 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
23e10 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
23e20 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
23e30 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
23e40 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
23e50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23e60 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
23e70 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
23e80 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
23e90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
23ea0 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  um(Parse*);.int 
23eb0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
23ec0 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
23ed0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
23ee0 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
23ef0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
23f00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23f10 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20  rCompare(Expr*, 
23f20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
23f30 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
23f40 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
23f50 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
23f60 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
23f70 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45  xprImpliesExpr(E
23f80 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
23f90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23fa0 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
23fb0 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
23fc0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
23fd0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
23fe0 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
23ff0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
24000 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
24010 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
24020 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
24030 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
24040 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
24050 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
24060 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
24070 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  ST.void sqlite3P
24080 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
24090 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
240a0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
240b0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76  (void);.#endif.v
240c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
240d0 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
240e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
240f0 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
24100 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
24110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
24120 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
24130 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
24140 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
24150 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
24160 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
24170 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24180 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61  ite3CommitTransa
24190 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
241a0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
241b0 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ackTransaction(P
241c0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
241d0 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
241e0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
241f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24200 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
24210 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
24220 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
24230 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
24240 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
24250 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
24260 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
24270 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
24280 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
24290 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
242a0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
242b0 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
242c0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
242d0 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
242e0 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
242f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24300 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
24310 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
24320 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
24330 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
24340 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
24350 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
24360 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
24370 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
24380 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
24390 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
243a0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
243b0 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54  wDelete(Parse*,T
243c0 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
243d0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
243e0 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  8,u8,u8);.void s
243f0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
24400 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
24410 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
24420 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
24430 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
24440 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
24450 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
24460 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
24470 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
24480 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
24490 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
244a0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
244b0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
244c0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
244d0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
244e0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
244f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
24520 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
24530 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
24540 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
24550 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
24560 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
24570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
24580 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
24590 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
245a0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20   int, int, u8*, 
245b0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
245c0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
245d0 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
245e0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
245f0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
24600 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
24610 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
24620 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
24630 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
24640 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
24650 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
24660 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
24670 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
24680 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
24690 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
246a0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
246b0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
246c0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
246d0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
246e0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
246f0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
24700 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
24710 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
24720 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
24730 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
24740 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
24750 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
24760 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
24770 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
24780 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
24790 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
247a0 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
247b0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23  ,Select*,int);.#
247c0 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
247d0 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69  NABLED.void sqli
247e0 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
247f0 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63  (Select*,const c
24800 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
24810 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
24820 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a  ectSetName(A,B).
24830 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
24840 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
24850 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
24860 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
24870 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
24880 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
24890 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
248a0 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
248b0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
248c0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
248d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
248e0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
248f0 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
24900 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
24910 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
24920 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
24930 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
24940 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
24950 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
24960 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
24970 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
24980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
24990 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
249a0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
249b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
249c0 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
249d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
249e0 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
249f0 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
24a00 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
24a10 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
24a20 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
24a30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
24a40 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
24a50 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
24a60 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
24a70 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
24a80 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
24a90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
24ab0 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
24ac0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
24ad0 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
24ae0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
24af0 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
24b00 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
24b10 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
24b20 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
24b30 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
24b40 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
24b50 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
24b60 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
24b70 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
24b80 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
24b90 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
24ba0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
24bb0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
24bc0 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
24bd0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
24be0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
24bf0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
24c00 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
24c10 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
24c20 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
24c50 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
24c60 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24c70 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
24c80 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
24c90 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
24ca0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
24cb0 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
24cc0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
24cd0 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
24ce0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
24cf0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
24d00 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
24d10 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
24d20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
24d30 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
24d40 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
24d50 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
24d60 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
24d70 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
24d80 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
24d90 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b      Select*,u8);
24dd0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
24de0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
24df0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
24e00 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
24e10 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
24e20 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
24e30 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
24e40 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
24e50 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
24e60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
24e70 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
24e80 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
24e90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24ea0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
24eb0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
24ec0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
24ed0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
24ee0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
24ef0 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
24f00 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
24f10 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
24f20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
24f30 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
24f40 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
24f50 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
24f60 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
24f70 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
24f80 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
24f90 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
24fa0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
24fb0 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
24fc0 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
24fd0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
24fe0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
24ff0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
25000 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
25010 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
25020 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
25030 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
25040 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
25050 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
25060 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
25070 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25080 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
25090 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
250a0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
250b0 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
250c0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
250d0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
250e0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
250f0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
25100 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
25110 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
25120 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25130 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
25140 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
25150 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
25160 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
25170 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
25180 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
25190 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
251a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
251b0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
251c0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
251d0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
251e0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
251f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
25200 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
25210 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
25220 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25230 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
25240 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
25250 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
25260 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
25270 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
25280 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
25290 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
252a0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
252b0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
252c0 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
252d0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
252e0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
252f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25300 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
25310 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
25320 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
25330 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
25340 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
25350 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
25360 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
25370 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
25380 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
25390 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
253a0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
253b0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
253c0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
253d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
253e0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
253f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
25400 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
25410 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
25420 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25430 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
25440 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
25450 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
25460 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
25470 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
25480 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
25490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
254a0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
254b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
254c0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
254d0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
254e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
254f0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
25500 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
25510 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
25520 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
25530 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
25540 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
25550 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
25560 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
25570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
25580 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
25590 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
255a0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
255b0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
255c0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
255d0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
255e0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
255f0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
25600 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
25610 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
25620 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
25630 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
25640 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
25650 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
25660 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25670 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25680 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
25690 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
256a0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
256b0 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
256c0 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
256d0 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
256e0 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
256f0 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
25700 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
25710 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
25720 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
25730 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
25740 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
25750 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
25760 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
25770 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
25780 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
25790 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
257a0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
257b0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
257c0 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
257d0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
257e0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
257f0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
25800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
25810 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
25820 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
25830 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
25840 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
25850 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
25860 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
25870 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
25880 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
25890 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
258a0 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
258b0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
258c0 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
258d0 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
258e0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
258f0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
25900 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
25910 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
25920 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
25930 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
25940 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
25950 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
25960 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
25970 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
25980 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
25990 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
259a0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
259b0 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
259c0 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
259d0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
259e0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
259f0 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
25a00 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
25a10 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
25a20 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
25a30 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
25a40 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
25a50 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
25a60 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
25a70 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
25a80 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
25a90 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
25aa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
25ab0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
25ac0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
25ad0 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
25ae0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
25af0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
25b00 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
25b10 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
25b20 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
25b30 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
25b40 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
25b50 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
25b60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
25b70 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
25b80 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
25b90 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
25ba0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
25bb0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
25bc0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
25bd0 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
25be0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
25bf0 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
25c00 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
25c10 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
25c20 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
25c30 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
25c40 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
25c50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
25c60 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
25c70 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
25c80 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
25c90 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
25ca0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
25cb0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
25cc0 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
25cd0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
25ce0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
25cf0 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
25d00 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
25d10 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
25d20 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
25d30 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
25d40 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
25d50 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
25d60 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
25d70 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
25d80 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
25d90 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
25da0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
25db0 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
25dc0 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
25dd0 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
25de0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
25df0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
25e00 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
25e10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
25e20 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25e30 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
25e40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
25e50 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
25e60 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
25e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
25e80 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
25e90 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
25ea0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25eb0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
25ec0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
25ed0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
25ee0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
25ef0 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
25f00 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
25f10 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
25f20 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
25f30 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
25f40 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
25f50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
25f60 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
25f70 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
25f80 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
25f90 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25fa0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
25fb0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
25fc0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
25fd0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
25fe0 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
25ff0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
26000 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
26010 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
26020 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
26030 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
26040 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
26050 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
26060 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
26070 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
26080 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
260a0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
260b0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
260c0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
260d0 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
260e0 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
260f0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
26100 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
26110 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
26120 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20  qlite3 *);.char 
26130 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
26140 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
26150 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
26160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
26170 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
26180 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
26190 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
261a0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
261b0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
261c0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
261d0 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
261e0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
261f0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
26200 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
26210 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
26220 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
26230 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
26240 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
26250 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
26260 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
26270 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
26280 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
26290 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
262a0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
262b0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
262c0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
262d0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
262e0 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
262f0 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
26300 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
26310 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
26320 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
26330 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
26340 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
26350 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
26360 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
26370 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
26380 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
26390 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
263a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
263b0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
263c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
263d0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
263e0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
263f0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
26400 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
26410 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
26420 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
26430 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
26440 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
26450 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
26460 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
26470 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
26480 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
26490 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
264a0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
264b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
264c0 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
264d0 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
264e0 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
264f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
26500 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
26510 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
26520 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
26530 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e  ite3SelectWrongN
26540 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72  umTermsError(Par
26550 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65  se *pParse, Sele
26560 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69  ct *p);.int sqli
26570 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
26580 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
26590 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
265a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
265b0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
265c0 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
265d0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
265e0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
265f0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69  te3ResolveExprLi
26600 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  stNames(NameCont
26610 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ext*, ExprList*)
26620 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
26630 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
26640 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
26650 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
26660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
26670 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
26680 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
26690 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
266a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
266b0 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
266c0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
266d0 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
266e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
266f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
26700 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
26710 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
26720 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26730 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
26740 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
26750 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
26760 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
26770 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
26780 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
26790 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
267a0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
267b0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
267c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
267d0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
267e0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
267f0 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
26800 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
26810 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
26820 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
26830 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
26840 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
26850 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26860 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
26870 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
26880 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
26890 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
268a0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
268b0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
268c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
268d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
268e0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
268f0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
26900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26910 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
26920 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
26930 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
26940 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
26950 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
26960 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
26970 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
26980 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
26990 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
269a0 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
269b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
269c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
269d0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
269e0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
269f0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
26a00 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
26a10 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
26a20 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
26a30 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
26a40 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
26a50 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
26a60 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
26a70 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
26a80 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
26a90 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
26aa0 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
26ab0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
26ac0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
26ad0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
26ae0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
26af0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
26b00 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
26b10 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
26b20 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
26b30 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
26b40 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
26b50 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
26b60 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
26b70 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
26b80 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
26b90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
26ba0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
26bb0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
26bc0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
26bd0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
26be0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
26bf0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
26c00 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
26c10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
26c20 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
26c30 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
26c40 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
26c50 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
26c60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
26c70 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
26c80 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
26c90 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
26ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
26cb0 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
26cc0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
26cd0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26ce0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
26cf0 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
26d00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26d10 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
26d20 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
26d30 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
26d40 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
26d50 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
26d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
26d70 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
26d80 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
26d90 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
26da0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
26db0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
26dc0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
26dd0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
26de0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
26df0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
26e00 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
26e10 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
26e20 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26e30 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
26e40 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
26e50 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
26e60 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26e70 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
26e80 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
26e90 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
26ea0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
26eb0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
26ec0 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
26ed0 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
26ee0 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
26ef0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
26f00 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
26f10 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
26f20 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
26f30 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
26f40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
26f50 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
26f60 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
26f70 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
26f80 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
26f90 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
26fa0 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
26fb0 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
26fc0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
26fd0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
26fe0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
26ff0 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
27000 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
27010 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69  d*(*)(u64));.voi
27020 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
27030 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
27040 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
27050 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
27060 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
27070 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
27080 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
27090 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
270a0 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
270b0 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
270c0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
270d0 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
270e0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
270f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27100 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
27110 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
27120 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
27130 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
27140 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27150 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
27160 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
27170 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
27180 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
27190 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
271a0 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
271b0 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
271c0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
271d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
271e0 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
271f0 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
27200 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
27210 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
27220 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
27230 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
27240 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
27250 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
27260 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
27270 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
27280 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
27290 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
272a0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
272b0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
272c0 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
272d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
272e0 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
272f0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
27300 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
27310 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
27320 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20  k(X) .#  define 
27330 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
27340 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
27350 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
27360 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
27370 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
27380 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
27390 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
273a0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
273b0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
273c0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
273d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
273e0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
273f0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
27400 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27410 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
27420 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
27430 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
27440 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
27450 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
27460 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
27470 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
27480 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
27490 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
274a0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
274b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
274c0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
274d0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
274e0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
274f0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
27500 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
27510 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
27520 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
27530 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
27540 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
27550 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
27560 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
27570 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
27580 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
27590 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
275a0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
275b0 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
275c0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
275d0 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
275e0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
275f0 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
27600 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
27610 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
27620 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f  leInit(Parse*,Mo
27630 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
27640 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
27650 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69  sTableClear(sqli
27660 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  te3*,Module*);.v
27670 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
27680 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
27690 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
276a0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
276b0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
276c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
276d0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
276e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
276f0 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
27700 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
27710 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
27720 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
27730 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
27740 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
27750 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
27760 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
27770 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
27780 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
27790 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
277a0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
277b0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
277c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
277d0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
277e0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
277f0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
27800 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
27810 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
27820 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
27830 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
27840 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
27850 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
27860 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
27870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
27880 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
27890 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
278a0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
278b0 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
278c0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
278d0 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
278e0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
278f0 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
27900 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
27910 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
27920 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27930 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
27940 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
27950 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
27960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
27970 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
27980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
27990 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
279a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
279b0 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
279c0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
279d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
279e0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
279f0 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
27a00 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
27a10 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
27a20 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
27a30 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
27a40 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
27a50 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
27a60 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
27a70 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27a80 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
27a90 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
27aa0 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
27ab0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
27ac0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27ad0 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
27ae0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
27af0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
27b00 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
27b10 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
27b20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
27b30 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
27b40 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
27b50 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
27b60 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
27b70 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27b80 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
27b90 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
27ba0 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
27bb0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
27bc0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
27bd0 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
27be0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
27bf0 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
27c00 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
27c10 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
27c20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
27c30 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
27c40 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
27c50 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
27c60 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
27c70 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
27c80 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
27c90 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
27ca0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
27cb0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
27cc0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
27cd0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
27ce0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
27cf0 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
27d00 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
27d10 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
27d20 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
27d30 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
27d40 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
27d50 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
27d60 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
27d70 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
27d80 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
27d90 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
27da0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
27db0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27dc0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
27dd0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
27de0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
27df0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
27e00 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
27e10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
27e20 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
27e30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
27e40 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
27e50 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
27e60 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
27e70 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
27e80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
27e90 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
27ea0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
27eb0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
27ec0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27ed0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
27ee0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
27ef0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
27f00 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
27f10 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
27f20 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
27f30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27f40 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
27f50 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
27f60 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
27f70 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
27f80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27f90 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
27fa0 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
27fb0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
27fc0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
27fd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27fe0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
27ff0 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
28000 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28010 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
28020 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
28030 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
28040 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
28050 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
28060 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
28070 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
28080 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
28090 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
280a0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
280b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
280c0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
280d0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
280e0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
280f0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
28100 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
28110 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
28120 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
28130 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
28140 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
28150 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
28160 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
28170 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
28180 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
28190 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
281a0 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
281b0 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
281c0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
281d0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
281e0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
281f0 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
28200 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
28210 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
28220 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
28230 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
28240 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28250 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
28260 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
28270 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
28280 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
28290 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
282a0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
282b0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
282c0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
282d0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
282e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
282f0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
28300 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
28310 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
28320 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28330 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
28340 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
28350 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
28360 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
28370 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
28380 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
28390 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
283a0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
283b0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
283c0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
283d0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
283e0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
283f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
28400 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
28410 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
28420 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
28430 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
28440 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
28450 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
28460 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
28470 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
28480 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
28490 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
284a0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
284b0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
284c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
284d0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
284e0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
284f0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
28500 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
28510 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
28520 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
28530 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
28540 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
28550 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
28560 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
28570 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
28580 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
28590 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
285a0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
285b0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
285c0 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69   u32, int*);..#i
285d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
285e0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
285f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
28600 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
28610 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
28620 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
28630 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
28640 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
28650 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
28660 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
28670 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
28680 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
28690 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
286a0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
286b0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
286c0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
286d0 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
286e0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
286f0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
28700 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28710 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
28720 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
28730 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
28740 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
28750 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
28760 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
28770 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
28780 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
28790 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
287a0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
287b0 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
287c0 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
287d0 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
287e0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
287f0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
28800 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
28810 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
28820 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
28830 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
28840 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
28850 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
28860 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
28870 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
28880 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
28890 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
288a0 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
288b0 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
288c0 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
288d0 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
288e0 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
288f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
28900 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
28910 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
28920 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
28930 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
28940 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28950 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
28960 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
28970 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28980 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
28990 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
289a0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
289b0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
289c0 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
289d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
289e0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
289f0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
28a00 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
28a10 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
28a20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28a30 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
28a40 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
28a50 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
28a60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
28a70 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
28a80 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
28a90 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
28aa0 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
28ab0 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
28ac0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
28ad0 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
28ae0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
28af0 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
28b00 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
28b10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28b20 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
28b30 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
28b40 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
28b50 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
28b60 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
28b70 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
28b80 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
28b90 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
28ba0 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
28bb0 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
28bc0 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
28bd0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
28be0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
28bf0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
28c00 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
28c10 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
28c20 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
28c30 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
28c40 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
28c50 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
28c60 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
28c70 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
28c80 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
28c90 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
28ca0 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
28cb0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
28cc0 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
28cd0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
28ce0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
28cf0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
28d00 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
28d10 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
28d20 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
28d30 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
28d40 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
28d50 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
28d60 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
28d70 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
28d80 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
28d90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
28da0 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
28db0 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
28dc0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
28dd0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
28de0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
28df0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
28e00 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
28e10 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
28e20 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28e30 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
28e40 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
28e50 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
28e60 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
28e70 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
28e80 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
28e90 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
28ea0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
28eb0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
28ec0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
28ed0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
28ee0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
28ef0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
28f00 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
28f10 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
28f20 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
28f30 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
28f40 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
28f50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
28f60 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
28f70 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
28f80 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
28f90 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
28fa0 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
28fb0 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
28fc0 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
28fd0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
28fe0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
28ff0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
29000 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
29010 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
29020 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
29030 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
29040 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
29050 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
29060 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
29070 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
29080 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
29090 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
290a0 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
290b0 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
290c0 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
290d0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
290e0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
290f0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
29100 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
29110 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a  nstraint. .**.**
29120 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
29130 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
29140 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
29150 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
29160 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
29170 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
29180 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
29190 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
291a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
291b0 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
291c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
291d0 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
291e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
291f0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
29200 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
29210 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29220 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
29230 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29240 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29250 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
29260 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
29270 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
29280 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
29290 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
292a0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
292b0 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
292c0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
292d0 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
292e0 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
292f0 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
29300 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
29310 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
29320 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
29330 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
29340 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
29350 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41  ine MEMTYPE_SCRA
29360 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20  TCH    0x04  /* 
29370 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69  Scratch allocati
29380 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
29390 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
293a0 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20    0x08  /* Page 
293b0 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
293c0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  s */../*.** Thre
293d0 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
293e0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
293f0 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
29400 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
29410 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
29420 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
29430 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
29440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
29450 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
29460 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
29470 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
29480 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
29490 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
294a0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
294b0 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
294c0 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
294d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
294e0 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
294f0 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.