/ Hex Artifact Content
Login

Artifact f298ca1b9fc4826becdec3918f10d216a23ac4d1:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a10: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
1a20: 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e   compiler intrin
1a30: 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20 61  sics we desire a
1a40: 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a  re enabled when.
1a50: 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  ** compiling wit
1a60: 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
1a70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43   version of MSVC
1a80: 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65   unless prevente
1a90: 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49  d by.** the SQLI
1aa0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1ab0: 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a  NSIC define..*/.
1ac0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ad0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1ae0: 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65 66  INSIC).#  if def
1af0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1b00: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30  & _MSC_VER>=1300
1b10: 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e 65  .#    if !define
1b20: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20  d(_WIN32_WCE).# 
1b30: 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e       include <in
1b40: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70  trin.h>.#      p
1b50: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
1b60: 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74  _byteswap_ushort
1b70: 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  ).#      pragma 
1b80: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
1b90: 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20  wap_ulong).#    
1ba0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1bb0: 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61 72  ic(_ReadWriteBar
1bc0: 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65 0a  rier).#    else.
1bd0: 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c  #      include <
1be0: 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20  cmnintrin.h>.#  
1bf0: 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69 66    endif.#  endif
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c10: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
1c20: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
1c30: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
1c40: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
1c50: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1c60: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1c70: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1c80: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1c90: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1ca0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1cb0: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1cc0: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1cd0: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1ce0: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1cf0: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
1d00: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
1d10: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
1d20: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
1d30: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
1d40: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
1d50: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1d60: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1d70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1d80: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1d90: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1da0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1db0: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1dc0: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1dd0: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1de0: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1df0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1e00: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
1e10: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
1e20: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
1e30: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1e40: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
1e50: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1e60: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1e70: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1e80: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1e90: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1ea0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1eb0: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1ec0: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1ed0: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1ee0: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1ef0: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
1f00: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1f10: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
1f20: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
1f30: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
1f40: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
1f50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1f60: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1f70: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1f80: 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  ** EVIDENCE-OF: 
1f90: 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65  R-25715-37072 Me
1fa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1fb0: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 65  statistics are e
1fc0: 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66  nabled by.** def
1fd0: 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69  ault unless SQLi
1fe0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1ff0: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ith SQLITE_DEFAU
2000: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69  LT_MEMSTATUS=0 i
2010: 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20  n.** which case 
2020: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2030: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
2040: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
2050: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ault..*/.#if !de
2060: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
2070: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
2080: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2090: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
20a0: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
20b0: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
20c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
20d0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
20e0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
20f0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
2100: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
2110: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
2120: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
2130: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2140: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
2150: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
2160: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
2170: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
2180: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
2190: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
21a0: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
21b0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
21c0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
21d0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
21e0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
21f0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
2200: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
2210: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
2220: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
2230: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
2240: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
2250: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
2260: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
2270: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
2280: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
2290: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
22a0: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
22b0: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
22c0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
22d0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
22e0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
22f0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
2300: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
2310: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
2320: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
2330: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
2340: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
2350: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
2360: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
2370: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
2380: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
2390: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
23a0: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
23b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
23c0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
23d0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
23e0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
23f0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2400: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2410: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2420: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2430: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2440: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2450: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2460: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2470: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2480: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2490: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
24a0: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
24b0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
24c0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
24d0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
24e0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
24f0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
2500: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2510: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2520: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2540: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2550: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2560: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2570: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2590: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
25a0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
25b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
25c0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
25d0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
25e0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
25f0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
2600: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
2610: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2620: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2630: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2640: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2650: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2660: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2670: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2680: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2690: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
26a0: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
26b0: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
26c0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
26d0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
26e0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
26f0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
2700: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
2710: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2720: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2730: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2740: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2750: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2760: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2770: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2780: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2790: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
27a0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
27b0: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
27c0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
27d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
27e0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
27f0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
2800: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
2810: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2820: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2830: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2840: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2850: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2860: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2870: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2880: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2890: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
28a0: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
28b0: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
28c0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
28d0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
28e0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
28f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
2900: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
2910: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2920: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2930: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2940: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2950: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2960: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2970: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2980: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2990: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
29a0: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
29b0: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
29c0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
29d0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
29e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29f0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
2a00: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
2a10: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2a20: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2a30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2a40: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2a50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2a60: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2a70: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2a80: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2a90: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2aa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2ab0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2ac0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
2ad0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
2ae0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
2af0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
2b00: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b10: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2b20: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2b30: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2b40: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2b50: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2b60: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2b70: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2b80: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2b90: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2ba0: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2bb0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
2bc0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
2bd0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
2be0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
2bf0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
2c00: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
2c10: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2c20: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2c30: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2c40: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2c50: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2c60: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2c70: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2c80: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2c90: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2ca0: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2cb0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
2cc0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
2cd0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
2ce0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
2cf0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
2d00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
2d10: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2d20: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2d30: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2d40: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2d50: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2d60: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2d70: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2d80: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2d90: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2da0: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2db0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
2dc0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
2dd0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
2de0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2df0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2e00: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
2e10: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2e20: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2e30: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2e40: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2e50: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2e60: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2e70: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2e80: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2e90: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2ea0: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2eb0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2ec0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ed0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ee0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ef0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2f00: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2f10: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2f20: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2f30: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2f40: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2f50: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2f60: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2f70: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2f80: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2f90: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2fa0: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2fb0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2fc0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2fd0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2fe0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2ff0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3000: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3010: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3020: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3030: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3040: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3050: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3060: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3070: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3080: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3090: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
30a0: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
30b0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
30c0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
30d0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
30e0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
30f0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3100: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3110: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3120: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3130: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3140: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3150: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3160: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3170: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3180: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3190: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
31a0: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
31b0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
31c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
31d0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
31e0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
31f0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
3200: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
3210: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
3220: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
3230: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
3240: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
3250: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3260: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3270: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3280: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3290: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
32a0: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
32b0: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
32c0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
32d0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
32e0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
32f0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
3300: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
3310: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
3320: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
3330: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
3340: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
3350: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3360: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3370: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3380: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3390: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
33a0: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
33b0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
33c0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
33d0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
33e0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
33f0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
3400: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
3410: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3420: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3430: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3440: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3450: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3460: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3470: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3480: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3490: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
34a0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
34b0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
34c0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
34d0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
34e0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
34f0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3500: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3510: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3520: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3530: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3540: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3550: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3560: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3570: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3580: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3590: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
35a0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
35b0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
35c0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
35d0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
35e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
35f0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3600: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3610: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3620: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3630: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3640: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3650: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
3660: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
3670: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3680: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
3690: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
36a0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
36b0: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
36c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
36d0: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
36e0: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
36f0: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
3700: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
3710: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
3720: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
3730: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
3740: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
3750: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
3760: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
3770: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
3780: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
3790: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
37a0: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
37b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
37c0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
37d0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
37e0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
37f0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3800: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3810: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3820: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3830: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
3840: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
3850: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
3860: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
3870: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
3880: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
3890: 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67  nput is an integ
38a0: 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c  er that is too l
38b0: 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69  arge.** to fit i
38c0: 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73  n 32-bits.  This
38d0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
38e0: 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73  nside of various
38f0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d   testcase().** m
3900: 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20  acros to verify 
3910: 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73  that we have tes
3920: 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c  ted SQLite for l
3930: 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72  arge-file suppor
3940: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53  t..*/.#define IS
3950: 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28  _BIG_INT(X)  (((
3960: 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66  X)&~(i64)0xfffff
3970: 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  fff)!=0)../*.** 
3980: 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65  The macro unlike
3990: 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74  ly() is a hint t
39a0: 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20  hat surrounds a 
39b0: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65  boolean.** expre
39c0: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
39d0: 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61  ually false.  Ma
39e0: 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72  cro likely() sur
39f0: 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c  rounds.** a bool
3a00: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ean expression t
3a10: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74  hat is usually t
3a20: 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74  rue.  These hint
3a30: 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74  s could,.** in t
3a40: 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62  heory, be used b
3a50: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  y the compiler t
3a60: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
3a70: 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63  r code, but.** c
3a80: 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72  urrently they ar
3a90: 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20  e just comments 
3aa0: 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72  for human reader
3ab0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69  s..*/.#define li
3ac0: 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23  kely(X)    (X).#
3ad0: 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28  define unlikely(
3ae0: 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64  X)  (X)..#includ
3af0: 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c  e "hash.h".#incl
3b00: 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69  ude "parse.h".#i
3b10: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e  nclude <stdio.h>
3b20: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69  .#include <stdli
3b30: 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  b.h>.#include <s
3b40: 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64  tring.h>.#includ
3b50: 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e  e <assert.h>.#in
3b60: 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e  clude <stddef.h>
3b70: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
3b80: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
3b90: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
3ba0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
3bb0: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
3bc0: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
3bd0: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
3be0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3bf0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3c00: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
3c10: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
3c20: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
3c30: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
3c40: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
3c50: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
3c60: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
3c70: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
3c80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3c90: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
3ca0: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
3cb0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
3cc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
3cd0: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
3ce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
3cf0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
3d00: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
3d10: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
3d20: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
3d30: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
3d40: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
3d50: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
3d60: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
3d70: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
3d80: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
3d90: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
3da0: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
3db0: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
3dc0: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
3dd0: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
3de0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
3df0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
3e00: 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20  compiler .** to 
3e10: 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62  omit code used b
3e20: 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69  y TEMP tables wi
3e30: 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e  thout messy #ifn
3e40: 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  def statements..
3e50: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e60: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65  _OMIT_TEMPDB.#de
3e70: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
3e80: 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65   1.#else.#define
3e90: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23   OMIT_TEMPDB 0.#
3ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3eb0: 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e   "file format" n
3ec0: 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65  umber is an inte
3ed0: 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72  ger that is incr
3ee0: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
3ef0: 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76  .** the VDBE-lev
3f00: 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63  el file format c
3f10: 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c  hanges.  The fol
3f20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65  lowing macros de
3f30: 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20  fine the.** the 
3f40: 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72  default file for
3f50: 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61  mat for new data
3f60: 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61  bases and the ma
3f70: 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61  ximum file forma
3f80: 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69  t.** that the li
3f90: 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a  brary can read..
3fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3fb0: 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41  E_MAX_FILE_FORMA
3fc0: 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  T 4.#ifndef SQLI
3fd0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3fe0: 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20  FORMAT.# define 
3ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
4000: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e  ILE_FORMAT 4.#en
4010: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  dif../*.** Deter
4020: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69  mine whether tri
4030: 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73  ggers are recurs
4040: 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ive by default. 
4050: 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20   This can be.** 
4060: 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74  changed at run-t
4070: 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67  ime using a prag
4080: 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ma..*/.#ifndef S
4090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
40a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
40b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
40c0: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
40d0: 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65  VE_TRIGGERS 0.#e
40e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76  ndif../*.** Prov
40f0: 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ide a default va
4100: 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54  lue for SQLITE_T
4110: 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73  EMP_STORE in cas
4120: 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63  e it is not spec
4130: 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  ified.** on the 
4140: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a  command-line.*/.
4150: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54  #ifndef SQLITE_T
4160: 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69  EMP_STORE.# defi
4170: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4180: 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20  TORE 1.# define 
4190: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
41a0: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
41b0: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
41c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
41d0: 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73   If no value has
41e0: 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66   been provided f
41f0: 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  or SQLITE_MAX_WO
4200: 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72  RKER_THREADS, or
4210: 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45   if.** SQLITE_TE
4220: 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20  MP_STORE is set 
4230: 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20  to 3 (never use 
4240: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29  temporary files)
4250: 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20  , set it .** to 
4260: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
4270: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
4280: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
4290: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
42a0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
42b0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
42c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
42e0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
42f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4300: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
4310: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4320: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
4330: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4340: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4350: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4370: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4380: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
4390: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
43a0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
43b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
43c0: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
43d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
43e0: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
43f0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4400: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
4410: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4420: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
4430: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
4440: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
4450: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
4460: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
4470: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
4480: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
4490: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
44a0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
44b0: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
44c0: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
44d0: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
44e0: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
44f0: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
4500: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
4510: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
4520: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
4530: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
4540: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
4550: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69  will hold..*/.#i
4560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4570: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
4580: 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  SZ.# define SQLI
4590: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
45a0: 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e  E_INITSZ 100.#en
45b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
45c0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
45d0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
45e0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
45f0: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
4600: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
4610: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
4620: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
4630: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
4640: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
4650: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
4660: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
4670: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
4680: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
4690: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
46a0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64  o numbers..*/.#d
46b0: 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28  efine MIN(A,B) (
46c0: 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)<(B)?(A):(B))
46d0: 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  .#define MAX(A,B
46e0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
46f0: 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20  B))../*.** Swap 
4700: 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  two objects of t
4710: 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65  ype TYPE..*/.#de
4720: 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41  fine SWAP(TYPE,A
4730: 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41  ,B) {TYPE t=A; A
4740: 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a  =B; B=t;}../*.**
4750: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4760: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73   this machine us
4770: 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73  es EBCDIC.  (Yes
4780: 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a  , believe it or.
4790: 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72  ** not, there ar
47a0: 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73  e still machines
47b0: 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20   out there that 
47c0: 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a  use EBCDIC.).*/.
47d0: 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31  #if 'A' == '\301
47e0: 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  '.# define SQLIT
47f0: 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65  E_EBCDIC 1.#else
4800: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4810: 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a  _ASCII 1.#endif.
4820: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20  ./*.** Integers 
4830: 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20  of known sizes. 
4840: 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20   These typedefs 
4850: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72  might change for
4860: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a   architectures.*
4870: 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65  * where the size
4880: 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63  s very.  Preproc
4890: 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65  essor macros are
48a0: 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68   available so th
48b0: 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20  at the.** types 
48c0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e  can be convenien
48d0: 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74  tly redefined at
48e0: 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20   compile-type.  
48f0: 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  Like this:.**.**
4900: 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55           cc '-DU
4910: 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67  INTPTR_TYPE=long
4920: 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a   long int' ....*
4930: 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32  /.#ifndef UINT32
4940: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4950: 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64  VE_UINT32_T.#  d
4960: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
4970: 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73  E uint32_t.# els
4980: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4990: 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  32_TYPE unsigned
49a0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
49b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
49c0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
49d0: 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20  HAVE_UINT16_T.# 
49e0: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
49f0: 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65  YPE uint16_t.# e
4a00: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
4a10: 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT16_TYPE unsign
4a20: 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  ed short int.# e
4a30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4a40: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23  def INT16_TYPE.#
4a50: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31   ifdef HAVE_INT1
4a60: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  6_T.#  define IN
4a70: 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74  T16_TYPE int16_t
4a80: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4a90: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f  e INT16_TYPE sho
4aa0: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
4ab0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
4ac0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
4ad0: 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20   HAVE_UINT8_T.# 
4ae0: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
4af0: 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73  PE uint8_t.# els
4b00: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4b10: 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  8_TYPE unsigned 
4b20: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
4b30: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38  dif.#ifndef INT8
4b40: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4b50: 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  VE_INT8_T.#  def
4b60: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e  ine INT8_TYPE in
4b70: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
4b80: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
4b90: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
4ba0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4bb0: 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ef LONGDOUBLE_TY
4bc0: 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  PE.# define LONG
4bd0: 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67  DOUBLE_TYPE long
4be0: 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74   double.#endif.t
4bf0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e  ypedef sqlite_in
4c00: 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20  t64 i64;        
4c10: 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e    /* 8-byte sign
4c20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4c30: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e  pedef sqlite_uin
4c40: 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20  t64 u64;        
4c50: 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67   /* 8-byte unsig
4c60: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c70: 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ypedef UINT32_TY
4c80: 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20  PE u32;         
4c90: 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69    /* 4-byte unsi
4ca0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4cb0: 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54  typedef UINT16_T
4cc0: 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20  YPE u16;        
4cd0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73     /* 2-byte uns
4ce0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4cf0: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
4d00: 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20  YPE i16;        
4d10: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69      /* 2-byte si
4d20: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4d30: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
4d40: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
4d50: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
4d60: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4d70: 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59  .typedef INT8_TY
4d80: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
4d90: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
4da0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4db0: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41  ./*.** SQLITE_MA
4dc0: 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63  X_U32 is a u64 c
4dd0: 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20  onstant that is 
4de0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20  the maximum u64 
4df0: 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61  value.** that ca
4e00: 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  n be stored in a
4e10: 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73   u32 without los
4e20: 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  s of data.  The 
4e30: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30  value.** is 0x00
4e40: 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20  000000ffffffff. 
4e50: 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20   But because of 
4e60: 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63  quirks of some c
4e70: 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20  ompilers, we.** 
4e80: 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20  have to specify 
4e90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  the value in the
4ea0: 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20   less intuitive 
4eb0: 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f  manner shown:.*/
4ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4ed0: 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34  MAX_U32  ((((u64
4ee0: 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a  )1)<<32)-1)../*.
4ef0: 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
4f00: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73  used to store es
4f10: 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e  timates of the n
4f20: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
4f30: 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69   a.** table or i
4f40: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61  ndex.  This is a
4f50: 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n unsigned integ
4f60: 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39  er type.  For 99
4f70: 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f  .9% of.** the wo
4f80: 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e  rld, a 32-bit in
4f90: 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69  teger is suffici
4fa0: 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62  ent.  But a 64-b
4fb0: 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61  it integer.** ca
4fc0: 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d  n be used at com
4fd0: 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73  pile-time if des
4fe0: 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ired..*/.#ifdef 
4ff0: 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41  SQLITE_64BIT_STA
5000: 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20  TS. typedef u64 
5010: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36  tRowcnt;    /* 6
5020: 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65  4-bit only if re
5030: 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69  quested at compi
5040: 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65  le-time */.#else
5050: 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52  . typedef u32 tR
5060: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d  owcnt;    /* 32-
5070: 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75  bit is the defau
5080: 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  lt */.#endif../*
5090: 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75  .** Estimated qu
50a0: 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f  antities used fo
50b0: 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67  r query planning
50c0: 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31   are stored as 1
50d0: 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74  6-bit.** logarit
50e0: 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69  hms.  For quanti
50f0: 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20  ty X, the value 
5100: 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67  stored is 10*log
5110: 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67  2(X).  This.** g
5120: 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20  ives a possible 
5130: 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20  range of values 
5140: 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  of approximately
5150: 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39   1.0e986 to 1e-9
5160: 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61  86..** But the a
5170: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72  llowed values ar
5180: 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74  e "grainy".  Not
5190: 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20   every value is 
51a0: 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a  representable..*
51b0: 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71  * For example, q
51c0: 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64  uantities 16 and
51d0: 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70   17 are both rep
51e0: 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f  resented by a Lo
51f0: 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20  gEst.** of 40.  
5200: 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c  However, since L
5210: 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73  ogEst quantities
5220: 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20   are suppose to 
5230: 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a  be estimates,.**
5240: 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65   not exact value
5250: 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73  s, this imprecis
5260: 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f  ion is not a pro
5270: 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67  blem..**.** "Log
5280: 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f  Est" is short fo
5290: 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45  r "Logarithmic E
52a0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
52b0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
52c0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
52d0: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
52e0: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
52f0: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
5300: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
5310: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
5320: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
5330: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
5340: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
5350: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
5360: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
5370: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
5380: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
5390: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
53a0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
53b0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
53c0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
53d0: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
53e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
53f0: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
5400: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
5410: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
5420: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
5430: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
5440: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
5450: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
5460: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
5470: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
5480: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
5490: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
54a0: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
54b0: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
54c0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
54d0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
54e0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
54f0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
5500: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
5510: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5520: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
5530: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
5540: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
5550: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5560: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
5570: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5580: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
5590: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
55a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
55b0: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
55c0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
55d0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
55e0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
55f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
5600: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
5610: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5620: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
5630: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
5640: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
5650: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
5660: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
5670: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
5680: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
5690: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
56a0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
56b0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
56c0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
56d0: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
56e0: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
56f0: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
5700: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
5710: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
5720: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
5730: 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49  * -DSQLITE_RUNTI
5740: 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69  ME_BYTEORDER=1 i
5750: 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65  s set, then byte
5760: 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d  -order is determ
5770: 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74  ined.** at run-t
5780: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
5790: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
57a0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
57b0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
57c0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
57d0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
57e0: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
57f0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
5800: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
5810: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
5820: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
5830: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
5840: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
5850: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
5860: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
5870: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
5880: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
5890: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
58a0: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
58b0: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
58c0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
58d0: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
58e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
58f0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
5900: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5910: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
5920: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
5930: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
5940: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
5950: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
5960: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5970: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
5980: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
5990: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
59a0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
59b0: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
59c0: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
59d0: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
59e0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
59f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5a00: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
5a10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5a20: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
5a30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
5a40: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5a60: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5a70: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5a80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5a90: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5aa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5ab0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20  BYTEORDER    0  
5ac0: 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75     /* 0 means "u
5ad0: 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c  nknown at compil
5ae0: 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66  e-time" */.# def
5af0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
5b00: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
5b10: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
5b20: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
5b30: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5b40: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
5b50: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
5b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
5b70: 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54  16NATIVE  (SQLIT
5b80: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
5b90: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
5ba0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
5bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
5bc0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
5bd0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
5be0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
5bf0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
5c00: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
5c10: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
5c20: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
5c30: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
5c40: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
5c50: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
5c60: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
5c70: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
5c80: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
5c90: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
5ca0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
5cb0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
5cc0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
5cd0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
5ce0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
5cf0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
5d00: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
5d10: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
5d20: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
5d30: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
5d40: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
5d50: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
5d60: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
5d70: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
5d80: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
5d90: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
5da0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
5db0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
5dc0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
5dd0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
5de0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
5df0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
5e00: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
5e10: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
5e20: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
5e30: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
5e40: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
5e50: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
5e60: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
5e70: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
5e80: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
5e90: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5ea0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
5eb0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
5ec0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
5ed0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
5ee0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
5ef0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
5f00: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
5f10: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
5f20: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
5f30: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
5f40: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5f50: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
5f60: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5f70: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5f80: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5f90: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
5fa0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5fb0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5fc0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5fd0: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5fe0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
5ff0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
6000: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
6010: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
6020: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
6030: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6040: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
6050: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
6060: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
6070: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6090: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
60a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
60b0: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
60c0: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
60d0: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
60e0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
60f0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
6100: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
6110: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
6120: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
6130: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
6140: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
6150: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
6160: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
6170: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
6180: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
6190: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
61a0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
61b0: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
61c0: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
61d0: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
61e0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
61f0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
6200: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
6210: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
6220: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
6230: 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20  __FreeBSD__) \. 
6240: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72   || defined(__Dr
6250: 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64  agonFly__).#   d
6260: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6270: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
6280: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
6290: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
62a0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
62b0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
62c0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
62d0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
62e0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
62f0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
6300: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
6310: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
6320: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
6330: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
6340: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
6350: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
6360: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
6370: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
6380: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
6390: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
63a0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
63b0: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
63c0: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
63d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
63e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
63f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
6400: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
6410: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
6420: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6430: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
6440: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
6450: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
6460: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
6470: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
6480: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6490: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
64a0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
64b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
64c0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
64d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
64e0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
64f0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
6500: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6510: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
6520: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
6530: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
6540: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
6550: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
6560: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
6570: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
6580: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
6590: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
65a0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
65b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
65c0: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
65d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
65e0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
65f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6600: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
6610: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
6620: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
6630: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6640: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
6650: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
6660: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6670: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
6680: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
6690: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
66a0: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
66b0: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
66c0: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
66d0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
66e0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
66f0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
6700: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
6710: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
6720: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
6730: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
6740: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
6750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
6760: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
6770: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
6780: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
6790: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
67a0: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
67b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
67c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
67d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
67e0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
67f0: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
6800: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
6810: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
6820: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
6830: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
6840: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
6850: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
6860: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
6870: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
6880: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
6890: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
68a0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
68b0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
68c0: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
68d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
68e0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
68f0: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
6900: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
6910: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
6920: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
6930: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
6940: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6950: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
6960: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
6970: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
6980: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
6990: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
69a0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
69b0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
69e0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
69f0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6a10: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
6a20: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
6a30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
6a40: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
6a50: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
6a60: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
6a70: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
6a80: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
6a90: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
6aa0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
6ab0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6ac0: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6ad0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6ae0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6af0: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6b00: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6b10: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6b20: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6b30: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6b40: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6b50: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
6b60: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
6b70: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
6b80: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
6b90: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
6ba0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
6bb0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6bc0: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6bd0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6be0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6bf0: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6c00: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6c10: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6c20: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6c30: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6c40: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6c50: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6c60: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6c70: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6c80: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
6c90: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
6ca0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
6cb0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6cc0: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6cd0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6ce0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6cf0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6d00: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6d10: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6d20: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6d30: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6d40: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6d50: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6d60: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6d70: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6d80: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
6d90: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
6da0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
6db0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6dc0: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6dd0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6de0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6df0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6e00: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6e10: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6e20: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6e30: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6e40: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6e50: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6e60: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6e70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6e80: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
6e90: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
6ea0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
6eb0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6ec0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6ed0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6ee0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6ef0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6f00: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6f10: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6f20: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6f30: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6f40: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6f50: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6f60: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6f70: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6f80: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
6f90: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
6fa0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
6fb0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6fc0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6fd0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6fe0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6ff0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
7000: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
7010: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
7020: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
7030: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
7040: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
7050: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
7060: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
7070: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
7080: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
7090: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
70a0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
70b0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
70c0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
70d0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
70e0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
70f0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
7100: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
7110: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
7120: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
7130: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
7140: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
7150: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
7160: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
7170: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
7180: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
7190: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
71a0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
71b0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
71c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
71d0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
71e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
71f0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
7200: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
7210: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
7220: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
7230: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
7240: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
7250: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
7260: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
7270: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
7280: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
7290: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
72a0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
72b0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
72c0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
72d0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
72e0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
72f0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
7300: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
7310: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
7320: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
7330: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
7340: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
7350: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
7360: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
7370: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
7380: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
7390: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
73a0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
73b0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
73c0: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
73d0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
73e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
73f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
7400: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
7410: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
7420: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
7430: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
7440: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
7450: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
7460: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
7470: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
7480: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
7490: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
74a0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
74b0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
74c0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
74d0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
74e0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
74f0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
7500: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
7510: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
7520: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
7530: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
7540: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
7550: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
7560: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
7570: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
7580: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
7590: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
75a0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
75b0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
75c0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
75d0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
75e0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
75f0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
7600: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
7610: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
7620: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
7630: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
7640: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
7650: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
7660: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
7670: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
7680: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
7690: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
76a0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
76b0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
76c0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
76d0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
76e0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
76f0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
7700: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
7710: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
7720: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7730: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
7740: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
7750: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
7760: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
7770: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7780: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
7790: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
77a0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
77b0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
77c0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
77d0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
77e0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
77f0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
7800: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7810: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
7820: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7830: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
7840: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
7850: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
7860: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
7870: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
7880: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
7890: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
78a0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
78b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
78c0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
78d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78e0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
78f0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
7900: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
7910: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
7920: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
7930: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
7940: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
7950: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
7960: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7970: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
7980: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
7990: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
79a0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
79b0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
79c0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
79d0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
79e0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
79f0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
7a00: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
7a10: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
7a20: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
7a30: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
7a40: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
7a50: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
7a60: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
7a70: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7a80: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
7a90: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
7aa0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
7ab0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7ac0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
7ad0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
7ae0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
7af0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
7b00: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
7b10: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
7b20: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7b30: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
7b40: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
7b50: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
7b60: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
7b70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b80: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
7b90: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
7ba0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
7bb0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7bc0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
7bd0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
7be0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7bf0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7c00: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7c10: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7c20: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7c30: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7c40: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
7c50: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
7c60: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
7c70: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
7c80: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
7c90: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
7ca0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7cb0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
7cc0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
7cd0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
7ce0: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
7cf0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
7d00: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
7d10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d20: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
7d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d40: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
7d50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
7d60: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
7d70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
7d80: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
7d90: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
7da0: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
7db0: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
7dc0: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
7dd0: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
7de0: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
7df0: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
7e00: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
7e10: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
7e20: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
7e30: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
7e40: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
7e50: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
7e60: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
7e70: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
7e80: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
7e90: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
7ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
7eb0: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
7ec0: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
7ed0: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
7ee0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
7ef0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
7f00: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7f10: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
7f20: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
7f30: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
7f40: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
7f50: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
7f60: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
7f70: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
7f80: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
7f90: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
7fa0: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
7fb0: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
7fc0: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
7fd0: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
7fe0: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
7ff0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
8000: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
8010: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
8020: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
8030: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
8040: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
8050: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
8060: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
8070: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
8080: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
8090: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
80a0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
80b0: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
80c0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
80d0: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
80e0: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
80f0: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
8100: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
8110: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
8120: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8130: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
8140: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
8150: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
8160: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
8170: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
8180: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
8190: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
81a0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
81b0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
81c0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
81d0: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
81e0: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
81f0: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
8200: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
8210: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
8220: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
8230: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
8240: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
8250: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
8260: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
8270: 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65  ect..** .** Sche
8280: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
8290: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
82a0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
82b0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
82c0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
82d0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
82e0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
82f0: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
8300: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
8310: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
8320: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
8330: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
8340: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
8350: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
8360: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
8370: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
8380: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
8390: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
83a0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
83b0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
83c0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
83d0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
83e0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
83f0: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
8400: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
8410: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
8420: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
8430: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
8440: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
8450: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
8460: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
8470: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
8480: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
8490: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
84a0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
84b0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
84c0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
84d0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
84e0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
84f0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
8500: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
8510: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
8520: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
8530: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
8540: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
8550: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8560: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
8570: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
8580: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
8590: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
85a0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
85b0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
85c0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
85d0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
85e0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
85f0: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
8600: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
8610: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
8620: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
8630: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
8640: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
8650: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
8660: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
8670: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
8680: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
8690: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
86a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
86b0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
86c0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
86d0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
86e0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
86f0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
8700: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
8710: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
8720: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
8730: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
8740: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
8750: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
8760: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
8770: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
8780: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
8790: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
87a0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
87b0: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
87c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
87d0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
87e0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
87f0: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
8800: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
8810: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
8820: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
8830: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
8840: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
8850: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8860: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
8870: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
8880: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
8890: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
88a0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
88b0: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
88c0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
88d0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
88e0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
88f0: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
8900: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
8910: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
8920: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8930: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
8940: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
8950: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
8960: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
8970: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
8980: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
8990: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
89a0: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
89b0: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
89c0: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
89d0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
89e0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
89f0: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
8a00: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
8a10: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
8a20: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
8a30: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
8a40: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
8a50: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
8a60: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
8a70: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
8a80: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
8a90: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
8aa0: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
8ab0: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
8ac0: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
8ad0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
8ae0: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
8af0: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
8b00: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
8b10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
8b20: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
8b30: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
8b40: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
8b50: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
8b60: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
8b70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8b80: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
8b90: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
8ba0: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
8bb0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
8bc0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
8bd0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
8be0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
8bf0: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
8c00: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
8c10: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
8c20: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
8c30: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
8c40: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
8c50: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8c60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
8c70: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
8c80: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
8c90: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
8ca0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
8cb0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
8cc0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
8cd0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
8ce0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
8cf0: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
8d00: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
8d10: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
8d20: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
8d30: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
8d40: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
8d50: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
8d60: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8d70: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
8d80: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
8d90: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
8da0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
8db0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
8dc0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
8dd0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
8de0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
8df0: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
8e00: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
8e10: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
8e20: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
8e30: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
8e40: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
8e50: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8e60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
8e70: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
8e80: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
8e90: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
8ea0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
8eb0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
8ec0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
8ed0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
8ee0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
8ef0: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
8f00: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
8f10: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
8f20: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
8f30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
8f40: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
8f50: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
8f60: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
8f70: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
8f80: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
8f90: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
8fa0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
8fb0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
8fc0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
8fd0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
8fe0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
8ff0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
9000: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
9010: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
9020: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
9030: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
9040: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
9050: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
9060: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
9070: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
9080: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
9090: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
90a0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
90b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
90c0: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
90d0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
90e0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
90f0: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
9100: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
9110: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
9120: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
9130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
9140: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
9150: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
9160: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
9170: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
9180: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
9190: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
91a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
91b0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
91c0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
91d0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
91e0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
91f0: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
9200: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
9210: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
9220: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
9230: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
9240: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
9250: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
9260: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
9270: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
9280: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
9290: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
92a0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
92b0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
92c0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
92d0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
92e0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
92f0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
9300: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
9310: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
9320: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
9330: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
9340: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
9350: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
9360: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
9370: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
9380: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
9390: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
93a0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
93b0: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
93c0: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
93d0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
93e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
93f0: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
9400: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
9410: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
9420: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9430: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
9440: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9450: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
9460: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
9470: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9490: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
94a0: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
94b0: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
94e0: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
94f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
9500: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
9510: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
9520: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
9530: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
9540: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
9550: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
9560: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
9570: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
9580: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
9590: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
95a0: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
95b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
95c0: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
95d0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
95e0: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
95f0: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
9600: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
9610: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
9620: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
9630: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
9640: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
9650: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
9660: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
9670: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
9680: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
9690: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
96a0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
96b0: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
96c0: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
96d0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
96e0: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
96f0: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
9700: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
9710: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
9720: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
9730: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
9740: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
9750: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
9760: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
9770: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
9780: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
9790: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
97a0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
97b0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
97c0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
97d0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
97e0: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
97f0: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
9800: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
9810: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
9820: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9830: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
9840: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
9850: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
9860: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
9870: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9880: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9890: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
98c0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
98d0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
98e0: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
98f0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
9900: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
9910: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
9950: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ndif.../*.** Eac
9960: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
9970: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
9980: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9990: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
99a0: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
99b0: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
99c0: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
99d0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
99e0: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
99f0: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
9a00: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
9a10: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
9a20: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
9a30: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
9a40: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
9a50: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
9a60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
9a70: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
9a80: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
9a90: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
9aa0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
9ab0: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
9ae0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9b10: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
9b20: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
9b30: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73  /* Miscellaneous
9b60: 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f   flags. See belo
9b70: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
9b80: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
9b90: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
9ba0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
9bb0: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
9bc0: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9be0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
9bf0: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
9c00: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
9c10: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
9c20: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
9c30: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
9c40: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
9c50: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c70: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
9c80: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
9c90: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
9ca0: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
9cb0: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
9cc0: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
9cd0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
9ce0: 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  g */.  u16 dbOpt
9cf0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
9d00: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
9d10: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
9d20: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
9d30: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
9d60: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
9d70: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
9d80: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
9d90: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
9da0: 0a 20 20 75 38 20 62 43 6f 6e 63 75 72 72 65 6e  .  u8 bConcurren
9db0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9dc0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 74 72 61 6e   /* Current tran
9dd0: 73 61 63 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43  saction is "CONC
9de0: 55 52 52 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20  URRENT" */.  u8 
9df0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
9e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
9e10: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
9e20: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
9e30: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9e50: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9e60: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9e70: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9e80: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9ea0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9eb0: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9ec0: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9ed0: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9ee0: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9ef0: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
9f00: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
9f10: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
9f20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f30: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
9f40: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
9f50: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9f60: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9f70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9f80: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9f90: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9fa0: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9fb0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9fc0: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9fd0: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9fe0: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9ff0: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
a000: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
a010: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
a020: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
a030: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
a040: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
a050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
a060: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
a070: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
a080: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
a090: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
a0a0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a0b0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
a0c0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
a0d0: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
a0e0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
a0f0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
a100: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
a110: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
a120: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
a130: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
a140: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
a150: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
a160: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
a170: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
a180: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
a190: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
a1a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
a1b0: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
a1c0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
a1d0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
a1e0: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
a1f0: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
a200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
a210: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
a220: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a230: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a250: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
a260: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
a270: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
a280: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a2a0: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
a2b0: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
a2c0: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
a2d0: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
a2e0: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
a2f0: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
a300: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
a310: 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54      u8 imposterT
a320: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a330: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
a340: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
a350: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
a360: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
a370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a380: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
a390: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
a3a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
a3b0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
a3c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a3d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a3e0: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
a3f0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
a400: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
a410: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a420: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a430: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
a440: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
a450: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
a460: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a470: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
a480: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
a490: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a4b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a4c0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
a4d0: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
a4e0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a500: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
a510: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
a520: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
a530: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
a540: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
a550: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
a560: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
a570: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
a580: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
a590: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
a5a0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
a5b0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a5e0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
a5f0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
a600: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
a610: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
a620: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
a630: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a640: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a660: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a670: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
a680: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a690: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a6b0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
a6c0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
a6d0: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
a6e0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
a6f0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
a700: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a710: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a720: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a740: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
a750: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
a760: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
a770: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
a780: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
a790: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a7a0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a7b0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
a7c0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
a7d0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
a7e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
a7f0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
a800: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66  _int64);.#ifndef
a810: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
a820: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
a830: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
a840: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
a850: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
a860: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
a870: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
a880: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
a890: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
a8a0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
a8b0: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
a8c0: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
a8d0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
a8e0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
a8f0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
a900: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
a910: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
a920: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
a930: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
a940: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
a950: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
a960: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
a970: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
a980: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
a990: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
a9a0: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
a9b0: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
a9c0: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
a9d0: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
a9e0: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
a9f0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
aa00: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
aa10: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
aa20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
aa30: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
aa40: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61  ION.  sqlite3_xa
aa50: 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20  uth xAuth;      
aa60: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
aa70: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
aa80: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
aa90: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
aaa0: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
aab0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
aac0: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
aad0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
aae0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
aaf0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
ab00: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
ab10: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
ab20: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
ab30: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
ab40: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
ab50: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
ab60: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
ab70: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
ab80: 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  back */.  unsign
ab90: 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  ed nProgressOps;
aba0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
abb0: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
abc0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
abd0: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
abe0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
abf0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
ac00: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ac20: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
ac30: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
ac40: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ac60: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
ac70: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
ac80: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
ac90: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
aca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
acb0: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
acc0: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
acd0: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
ace0: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
acf0: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
ad00: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
ad10: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
ad20: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
ad30: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44  connect;    /* D
ad40: 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20  isconnect these 
ad50: 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f  in next sqlite3_
ad60: 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e  prepare() */.#en
ad70: 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73  dif.  FuncDefHas
ad80: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
ad90: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
ada0: 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e of connection 
adb0: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48  functions */.  H
adc0: 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20  ash aCollSeq;   
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ade0: 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  All collating se
adf0: 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73  quences */.  Bus
ae00: 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e  yHandler busyHan
ae10: 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75  dler;      /* Bu
ae20: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
ae30: 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d   Db aDbStatic[2]
ae40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ae50: 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66  * Static space f
ae60: 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74  or the 2 default
ae70: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53   backends */.  S
ae80: 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
ae90: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  oint;        /* 
aea0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73  List of active s
aeb0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
aec0: 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20  nt busyTimeout; 
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d  Busy handler tim
aef0: 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f  eout, in msec */
af00: 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e  .  int nSavepoin
af10: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
af20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f   /* Number of no
af30: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
af40: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
af50: 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t nStatement;   
af60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
af70: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
af80: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
af90: 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34  ctions  */.  i64
afa0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
afb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
afc0: 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  t deferred const
afd0: 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e  raints this tran
afe0: 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36  saction. */.  i6
aff0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
b000: 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ns;         /* N
b010: 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65  et deferred imme
b020: 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74  diate constraint
b030: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79  s */.  int *pnBy
b040: 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20  tesFreed;       
b050: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e       /* If not N
b060: 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ULL, increment t
b070: 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20  his in DbFree() 
b080: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
b090: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
b0a0: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
b0b0: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
b0c0: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
b0d0: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
b0e0: 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20  IC_MASTER .  ** 
b0f0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
b100: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
b110: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
b120: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20  de in notify.c. 
b130: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
b140: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
b150: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
b160: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
b170: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
b180: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
b190: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
b1a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
b1b0: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
b1c0: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
b1d0: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
b1e0: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
b1f0: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
b200: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
b210: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
b220: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
b230: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
b240: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
b250: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
b260: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
b270: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
b280: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
b290: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
b2a0: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
b2b0: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
b2c0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b2d0: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
b2e0: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
b2f0: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b320: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
b330: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
b340: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
b350: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
b360: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
b370: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
b380: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
b390: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
b3a0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
b3b0: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
b3c0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
b3d0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b3e0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
b3f0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b400: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
b410: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
b420: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
b430: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
b440: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
b450: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
b460: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
b470: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
b480: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
b490: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
b4a0: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
b4b0: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
b4c0: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
b4d0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
b4e0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
b4f0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
b500: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b510: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
b520: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
b530: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
b540: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
b550: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
b560: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
b570: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
b580: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
b590: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
b5a0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
b5b0: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
b5c0: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
b5d0: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
b5e0: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
b5f0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
b600: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
b610: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
b620: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
b630: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
b640: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
b650: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
b660: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
b670: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
b680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
b690: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
b6a0: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
b6b0: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
b6c0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
b6d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
b6e0: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
b6f0: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
b700: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
b710: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
b720: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
b730: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
b740: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
b750: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
b760: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
b7a0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
b7b0: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b7e0: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
b7f0: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
b800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b810: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
b820: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
b830: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
b840: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
b850: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b880: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
b890: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
b8a0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
b8b0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
b8c0: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
b8d0: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
b8e0: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
b8f0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
b900: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
b910: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
b920: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
b930: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
b940: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
b950: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
b960: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
b970: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
b980: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b990: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
b9a0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
b9b0: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
b9c0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
b9d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b9e0: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
b9f0: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
ba00: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
ba10: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
ba20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba30: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
ba40: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
ba50: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
ba60: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
ba70: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
ba80: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
ba90: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
baa0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
bab0: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
bac0: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
bad0: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
bae0: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
baf0: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
bb00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bb10: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
bb20: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
bb30: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
bb40: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
bb50: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
bb60: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
bb70: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
bb80: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
bb90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bba0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
bbb0: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
bbc0: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
bbd0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
bbe0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bbf0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
bc00: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
bc10: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
bc20: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
bc30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
bc40: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
bc50: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
bc60: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
bc70: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
bc80: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
bc90: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
bca0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
bcb0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
bcc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
bcd0: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
bce0: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
bcf0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
bd00: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
bd10: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
bd20: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
bd30: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
bd40: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
bd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd60: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
bd70: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
bd80: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
bd90: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
bda0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
bdb0: 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30          0x040000
bdc0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
bdd0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
bde0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bdf0: 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  E_Vacuum        
be00: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
be10: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
be20: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
be30: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
be40: 43 6b 20 20 20 20 20 30 78 31 30 30 30 30 30 30  Ck     0x1000000
be50: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
be60: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
be70: 6c 6f 61 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  load */.../*.** 
be80: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
be90: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
bea0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
beb0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
bec0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
bed0: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
bee0: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
bef0: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
bf00: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
bf10: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
bf20: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
bf30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bf40: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
bf50: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
bf60: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
bf70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bf80: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
bf90: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
bfa0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
bfb0: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
bfc0: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
bfd0: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
bfe0: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
bff0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c000: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
c010: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
c020: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
c030: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
c040: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
c050: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
c060: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
c070: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
c080: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
c090: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
c0a0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
c0b0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
c0c0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
c0d0: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
c0e0: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
c0f0: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
c100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
c110: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
c120: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
c130: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
c140: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
c150: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
c160: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
c170: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
c180: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
c190: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c1a0: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
c1b0: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
c1c0: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
c1d0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
c1e0: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
c1f0: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
c200: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
c210: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
c220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c230: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
c240: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
c250: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
c260: 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
c270: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
c280: 73 20 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a  s    0x2000   /*
c290: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
c2a0: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
c2b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c  efine SQLITE_All
c2c0: 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66  Opts        0xff
c2d0: 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69  ff   /* All opti
c2e0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  mizations */../*
c2f0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
c300: 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  esting whether o
c310: 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69  r not optimizati
c320: 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  ons are enabled 
c330: 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  or disabled..*/.
c340: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c350: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
c360: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c370: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
c380: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
c390: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
c3a0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
c3b0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
c3c0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
c3d0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
c3e0: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23  gs&(mask))==0).#
c3f0: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74  else.#define Opt
c400: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
c410: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23  d(db, mask)  0.#
c420: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c430: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
c440: 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  ask)   1.#endif.
c450: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
c460: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
c470: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
c480: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
c490: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
c4a0: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
c4b0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
c4c0: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
c4d0: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
c4e0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
c4f0: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
c500: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
c510: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
c520: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
c530: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
c540: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
c550: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
c560: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
c570: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
c580: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
c590: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
c5a0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
c5b0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
c5c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c5d0: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
c5e0: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
c5f0: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
c600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
c610: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
c620: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
c630: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
c640: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c650: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
c660: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
c670: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
c680: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
c690: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
c6a0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
c6b0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
c6c0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
c6d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c6e0: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
c6f0: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
c700: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
c710: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
c720: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c730: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
c740: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
c750: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
c760: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
c770: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
c780: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
c790: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
c7a0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
c7b0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
c7c0: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
c7d0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
c7e0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
c7f0: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
c800: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
c810: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
c820: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
c830: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
c840: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
c850: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
c860: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
c870: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
c880: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
c890: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
c8a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c8b0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
c8c0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
c8d0: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
c8e0: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
c8f0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
c900: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
c910: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
c920: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
c930: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
c940: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
c950: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
c960: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
c970: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
c980: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
c990: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
c9a0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
c9b0: 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72  e**); /* Regular
c9c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c9d0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
c9e0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
c9f0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
ca00: 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65  *); /* Aggregate
ca10: 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20   step */.  void 
ca20: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
ca30: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ca50: 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61  * Aggregate fina
ca60: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  lizer */.  char 
ca70: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
ca80: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
ca90: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
caa0: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
cab0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
cac0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
cad0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
cae0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63  e hash */.  Func
caf0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
cb00: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
cb10: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
cb20: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
cb30: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
cb40: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
cb50: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
cb60: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
cb70: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
cb80: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
cb90: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
cba0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
cbb0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
cbc0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
cbd0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
cbe0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
cbf0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
cc00: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
cc10: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
cc20: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
cc30: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
cc40: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
cc50: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
cc60: 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  to .** the numbe
cc70: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
cc80: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
cc90: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
cca0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
ccb0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
ccc0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
ccd0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
cce0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
ccf0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
cd00: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
cd10: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
cd20: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
cd30: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
cd40: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
cd50: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
cd60: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
cd70: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
cd80: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
cd90: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
cda0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
cdb0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
cdc0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
cdd0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
cde0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
cdf0: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
ce00: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
ce10: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
ce20: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
ce30: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
ce40: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
ce50: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
ce60: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
ce70: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
ce80: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
ce90: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
cea0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
ceb0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
cec0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
ced0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
cee0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
cef0: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
cf00: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
cf10: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
cf20: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
cf30: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
cf40: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
cf50: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
cf60: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
cf70: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
cf80: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
cf90: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
cfa0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
cfb0: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
cfc0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
cfd0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
cfe0: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
cff0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d000: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
d010: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
d020: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
d030: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
d040: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
d050: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
d060: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
d070: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
d080: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d090: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
d0a0: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
d0b0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
d0c0: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
d0d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d0e0: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
d0f0: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
d100: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
d110: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
d120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d130: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
d140: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
d150: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
d160: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d170: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
d180: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
d190: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
d1a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d1b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
d1c0: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
d1d0: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
d1e0: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
d1f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d200: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
d210: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
d220: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
d230: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
d240: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
d250: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
d260: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
d270: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
d280: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d290: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
d2a0: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
d2b0: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
d2c0: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
d2d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d2e0: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
d2f0: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
d300: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
d310: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
d320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d330: 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
d340: 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
d350: 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
d360: 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
d390: 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
d3a0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
d3b0: 65 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a  er time */../*.*
d3c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d3d0: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
d3e0: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
d3f0: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
d400: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
d410: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
d420: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
d430: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
d440: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
d450: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d460: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d470: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
d480: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
d490: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
d4a0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
d4b0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
d4c0: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
d4d0: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
d4e0: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
d4f0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
d500: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
d510: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
d520: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d530: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
d540: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
d550: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
d560: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
d570: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
d580: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
d590: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
d5a0: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
d5b0: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
d5c0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
d5d0: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
d5e0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d5f0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d600: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
d610: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
d620: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
d630: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
d640: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
d650: 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
d660: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d670: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
d680: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
d690: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
d6a0: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
d6b0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
d6c0: 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
d6d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d6e0: 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
d6f0: 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
d700: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
d710: 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
d720: 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
d730: 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
d740: 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
d750: 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
d760: 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
d770: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
d780: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d790: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
d7a0: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
d7b0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
d7c0: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
d7d0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
d7e0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
d7f0: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
d800: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
d810: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
d820: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
d830: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
d840: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
d850: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
d860: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
d870: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
d880: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
d890: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
d8a0: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
d8b0: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
d8c0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
d8d0: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
d8e0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
d8f0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
d900: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
d910: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
d920: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
d930: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
d940: 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69  C .**     functi
d950: 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
d960: 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
d970: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
d980: 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
d990: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
d9a0: 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
d9b0: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
d9c0: 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
d9d0: 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
d9e0: 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
d9f0: 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
da00: 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
da10: 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
da20: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
da30: 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
da40: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
da50: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
da60: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
da70: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
da80: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
da90: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
daa0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
dab0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
dac0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
dad0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dae0: 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e  define VFUNCTION
daf0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
db00: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
db10: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
db20: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
db30: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
db40: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
db50: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
db60: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
db70: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
db80: 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e  define DFUNCTION
db90: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
dba0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
dbb0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
dbc0: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
dbd0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dbe0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dbf0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
dc00: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
dc10: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
dc20: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dc30: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
dc40: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
dc50: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dc60: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
dc70: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
dc80: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
dc90: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dca0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dcb0: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
dcc0: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
dcd0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dce0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dcf0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dd00: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
dd10: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
dd20: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
dd30: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
dd40: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
dd50: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
dd60: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
dd70: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
dd80: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
dd90: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
dda0: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
ddb0: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
ddc0: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
ddd0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
dde0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
ddf0: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
de00: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
de10: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
de20: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
de30: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
de40: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
de50: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
de60: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
de70: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
de80: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
de90: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
dea0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
deb0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
dec0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
ded0: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
dee0: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
def0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
df00: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
df10: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
df20: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
df30: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
df40: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
df50: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
df60: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
df70: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
df80: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
df90: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
dfa0: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
dfb0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
dfc0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
dfd0: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
dfe0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
dff0: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
e000: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
e010: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
e020: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
e030: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
e040: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
e050: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
e060: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
e070: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
e080: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
e090: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
e0a0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e0c0: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
e0d0: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
e0e0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
e0f0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
e100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
e110: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
e120: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
e130: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
e140: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
e150: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e160: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
e170: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
e180: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e1a0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
e1b0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
e1c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
e1d0: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
e1e0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
e1f0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
e200: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
e210: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
e220: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
e230: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
e240: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
e250: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
e260: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
e270: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
e280: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
e290: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
e2a0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
e2b0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
e2c0: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
e2d0: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
e2e0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
e2f0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
e300: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e310: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
e320: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
e330: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
e340: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
e350: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
e360: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
e370: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
e380: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
e390: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
e3a0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e3c0: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
e3d0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
e3e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
e410: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
e420: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
e430: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
e440: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
e450: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
e460: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
e470: 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
e480: 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e4a0: 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
e4b0: 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
e4c0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
e4d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
e4e0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
e4f0: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
e500: 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
e510: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
e520: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
e530: 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
e540: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
e550: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
e560: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20  olumn */.  Expr 
e570: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
e580: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
e590: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
e5a0: 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20   char *zDflt;   
e5b0: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
e5c0: 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  xt of the defaul
e5d0: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61  t value */.  cha
e5e0: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
e5f0: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
e600: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
e610: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
e620: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e630: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
e640: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
e650: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
e660: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
e670: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
e680: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
e690: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
e6a0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
e6b0: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
e6c0: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
e6d0: 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
e6e0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
e6f0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74  imated size of t
e700: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54  his column.  INT
e710: 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
e720: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
e730: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
e740: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
e750: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
e760: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
e770: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
e780: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
e790: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
e7a0: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
e7b0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
e7c0: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
e7d0: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
e7e0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
e7f0: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
e800: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
e810: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
e820: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
e830: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
e840: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
e850: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
e860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
e870: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
e880: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
e890: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
e8a0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
e8b0: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
e8c0: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
e8d0: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
e8e0: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
e8f0: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
e900: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
e910: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
e920: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
e930: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
e940: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
e950: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
e960: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
e970: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e980: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
e990: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
e9a0: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
e9b0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
e9c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
e9d0: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
e9e0: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
e9f0: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
ea00: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
ea10: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
ea20: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
ea30: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
ea40: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
ea50: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
ea60: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
ea70: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
ea80: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
ea90: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
eaa0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
eab0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
eac0: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
ead0: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
eae0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
eaf0: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
eb00: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
eb10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eb20: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
eb30: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
eb40: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
eb50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
eb60: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
eb70: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
eb80: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
eb90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
eba0: 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
ebb0: 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
ebc0: 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
ebd0: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
ebe0: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
ebf0: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
ec00: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
ec10: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
ec20: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
ec30: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
ec40: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
ec50: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
ec60: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
ec70: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
ec80: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
ec90: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
eca0: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
ecb0: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
ecc0: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
ecd0: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
ece0: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
ecf0: 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
ed00: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
ed10: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
ed20: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
ed30: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
ed40: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
ed50: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
ed60: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
ed70: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
ed80: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
ed90: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
eda0: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
edb0: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
edc0: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
edd0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
ede0: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
edf0: 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c  son.  And the BL
ee00: 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74  OB type is first
ee10: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ee20: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20  ITE_AFF_BLOB    
ee30: 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
ee40: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
ee50: 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
ee60: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
ee70: 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
ee80: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ee90: 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
eea0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
eeb0: 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
eec0: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
eed0: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
eee0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
eef0: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
ef00: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ef10: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
ef20: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
ef30: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
ef40: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
ef50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ef60: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
ef70: 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
ef80: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
ef90: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
efa0: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
efb0: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
efc0: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
efd0: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
efe0: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
eff0: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
f000: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
f010: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
f020: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
f030: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
f040: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
f050: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
f060: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
f070: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
f080: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
f090: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
f0a0: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
f0b0: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
f0c0: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
f0d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
f0e0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f0f0: 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
f100: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
f110: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
f120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f130: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
f140: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
f150: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
f160: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
f170: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f180: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
f190: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
f1a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f1b0: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
f1c0: 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
f1d0: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
f1e0: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
f1f0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
f200: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f210: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
f220: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
f230: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
f240: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
f250: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
f260: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
f270: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
f280: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
f290: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
f2a0: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
f2b0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
f2c0: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
f2d0: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
f2e0: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
f2f0: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
f300: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
f310: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
f320: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
f330: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
f340: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
f350: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
f360: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
f370: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
f380: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
f390: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
f3a0: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
f3b0: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
f3c0: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
f3d0: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
f3e0: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
f3f0: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
f400: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
f410: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
f420: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
f430: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
f440: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
f450: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
f460: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
f470: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
f480: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
f490: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
f4a0: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
f4b0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
f4c0: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
f4d0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
f4e0: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
f4f0: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
f500: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
f510: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
f520: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
f530: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
f540: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
f550: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
f560: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
f570: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
f580: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
f590: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
f5a0: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
f5b0: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
f5c0: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
f5d0: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
f5e0: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
f5f0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
f600: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
f610: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
f620: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
f630: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
f640: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
f650: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
f660: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
f670: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
f680: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
f690: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
f6a0: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
f6b0: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
f6c0: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
f6d0: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
f6e0: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
f6f0: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
f700: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
f710: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
f720: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
f730: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
f740: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
f750: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
f760: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
f770: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
f780: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
f790: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
f7a0: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
f7b0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f7c0: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
f7d0: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
f7e0: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
f7f0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
f800: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
f810: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
f820: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
f830: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
f840: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
f850: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
f860: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
f870: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
f880: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
f890: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
f8a0: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
f8b0: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
f8c0: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
f8d0: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
f8e0: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
f8f0: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
f900: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
f910: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
f920: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
f930: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
f940: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
f950: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
f960: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
f970: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
f980: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
f990: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
f9a0: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
f9b0: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
f9c0: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
f9d0: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
f9e0: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
f9f0: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
fa00: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
fa10: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
fa20: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
fa30: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
fa40: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
fa50: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
fa60: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
fa70: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
fa80: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
fa90: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
faa0: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
fab0: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
fac0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
fad0: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
fae0: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
faf0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
fb00: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
fb10: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
fb20: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
fb30: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
fb40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
fb50: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
fb60: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
fb70: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
fb80: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
fb90: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
fba0: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
fbb0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
fbc0: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
fbd0: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
fbe0: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
fbf0: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
fc00: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
fc10: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
fc20: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
fc30: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
fc40: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
fc50: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
fc60: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
fc90: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
fca0: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
fcb0: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
fcc0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
fcd0: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
fce0: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
fcf0: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
fd00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
fd10: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
fd20: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
fd30: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
fd40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
fd50: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
fd60: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
fd70: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
fd80: 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
fd90: 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
fda0: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
fdb0: 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
fdc0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
fdd0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
fde0: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
fdf0: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
fe00: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
fe10: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
fe20: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
fe30: 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
fe40: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
fe50: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
fe60: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
fe70: 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
fe80: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
fe90: 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
fea0: 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
feb0: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
fec0: 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
fed0: 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
fee0: 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
fef0: 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
ff00: 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
ff10: 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
ff20: 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
ff30: 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
ff40: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
ff50: 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
ff60: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
ff70: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
ff80: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
ff90: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
ffa0: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
ffb0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
ffc0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
ffd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
ffe0: 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
fff0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
10000 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
10010 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
10020 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
10030 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
10040 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69  table */.  i16 i
10050 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
10060 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
10070 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
10080 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
10090 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
100a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
100b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
100c0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
100d0 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
100e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
100f0 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
10100 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
10110 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45   LogEst nRowLogE
10120 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  st;   /* Estimat
10130 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
10140 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
10150 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
10160 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b  LogEst szTabRow;
10170 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
10180 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74  d size of each t
10190 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65  able row in byte
101a0 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
101b0 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55  TE_ENABLE_COSTMU
101c0 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74  LT.  LogEst cost
101d0 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73  Mult;     /* Cos
101e0 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72  t multiplier for
101f0 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c   using this tabl
10200 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38  e */.#endif.  u8
10210 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
10220 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
10230 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
10240 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
10250 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
10260 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
10270 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
10280 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
10290 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
102a0 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
102b0 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
102c0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
102d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
102e0 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
102f0 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
10300 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10310 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
10320 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
10330 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
10340 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
10350 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
10360 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
10370 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
10380 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
10390 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
103a0 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
103b0 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
103c0 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
103d0 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
103e0 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
103f0 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
10400 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
10410 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
10420 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
10430 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
10440 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
10450 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
10460 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
10470 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
10480 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
10490 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
104a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
104b0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
104c0 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
104d0 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
104e0 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c   applies to tabl
104f0 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  es or view that 
10500 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
10510 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
10520 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
10530 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
10540 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
10550 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
10560 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
10570 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
10580 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
10590 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
105a0 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
105b0 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
105c0 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
105d0 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
105e0 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
105f0 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
10600 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
10610 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
10620 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
10630 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
10640 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
10650 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
10660 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
10670 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
10680 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
10690 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
106a0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
106b0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
106c0 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
106d0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
106e0 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
106f0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
10700 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
10710 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
10720 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
10730 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
10740 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
10750 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
10760 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
10770 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
10780 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
10790 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f  wid    0x20    /
107a0 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
107b0 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
107c0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
107d0 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
107e0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20    0x40    /* No 
107f0 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f  user-visible "ro
10800 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23  wid" column */.#
10810 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64  define TF_OOOHid
10820 64 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20  den       0x80  
10830 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
10840 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
10850 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74   */.../*.** Test
10860 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
10870 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
10880 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
10890 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
108a0 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
108b0 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
108c0 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
108d0 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
108e0 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
108f0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
10900 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
10910 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10920 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
10930 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
10940 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
10950 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
10960 72 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65  rtual)!=0).#else
10970 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
10980 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
10990 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
109a0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
109b0 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   if a column is 
109c0 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e  hidden.  IsOrdin
109d0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
109e0 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ).** only works 
109f0 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20  for non-virtual 
10a00 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79  tables (ordinary
10a10 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77   tables and view
10a20 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77  s) and is.** alw
10a30 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73  ays false unless
10a40 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
10a50 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73  IDDEN_COLUMNS is
10a60 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a   defined.  The.*
10a70 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  * IsHiddenColumn
10a80 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65  () macro is gene
10a90 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a  ral purpose..*/.
10aa0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
10ab0 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
10ac0 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66  _COLUMNS).#  def
10ad0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
10ae0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
10af0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
10b00 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
10b10 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
10b20 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
10b30 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
10b40 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
10b50 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
10b60 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  lif !defined(SQL
10b70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
10b80 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65  TABLE).#  define
10b90 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
10ba0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
10bb0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
10bc0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
10bd0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
10be0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
10bf0 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20  n(X) 0.#else.#  
10c00 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
10c10 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
10c20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f   0.#  define IsO
10c30 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
10c40 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
10c50 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
10c60 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
10c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
10c80 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
10c90 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
10ca0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
10cb0 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62  0).#define Visib
10cc0 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29  leRowid(X) (((X)
10cd0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10ce0 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d  NoVisibleRowid)=
10cf0 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
10d00 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
10d10 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
10d20 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10d30 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10d40 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
10d50 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
10d60 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
10d70 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
10d80 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
10d90 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
10da0 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
10db0 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
10dc0 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
10dd0 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
10de0 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
10df0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
10e00 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
10e10 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
10e20 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
10e30 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
10e40 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
10e50 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
10e60 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
10e70 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
10e80 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
10e90 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
10ea0 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
10eb0 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
10ec0 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
10ed0 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
10ee0 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
10ef0 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
10f00 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
10f10 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
10f20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
10f30 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
10f40 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
10f50 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
10f60 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
10f70 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
10f80 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
10f90 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
10fa0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
10fb0 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
10fc0 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
10fd0 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
10fe0 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
10ff0 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
11000 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
11010 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
11020 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
11030 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
11040 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
11050 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
11060 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
11070 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
11080 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
11090 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
110a0 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
110b0 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
110c0 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
110d0 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
110e0 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
110f0 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
11100 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
11110 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
11120 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
11130 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
11140 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
11150 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
11160 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
11170 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
11180 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
11190 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
111a0 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
111b0 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
111c0 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
111d0 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
111e0 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
111f0 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
11200 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
11210 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
11220 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
11230 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
11240 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
11250 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
11260 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
11270 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
11280 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
11290 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
112a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
112b0 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
112c0 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
112d0 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
112e0 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
112f0 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
11300 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
11310 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
11320 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
11330 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
11340 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
11350 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
11360 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
11370 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
11380 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
11390 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
113a0 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
113b0 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
113c0 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
113d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
113e0 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
113f0 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
11400 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
11410 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
11420 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
11430 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
11440 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
11450 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
11460 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
11470 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
11480 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
11490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
114a0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
114b0 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
114c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
114d0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
114e0 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
114f0 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
11500 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
11510 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
11520 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
11530 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
11540 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
11550 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
11560 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
11570 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
11580 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
11590 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
115a0 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
115b0 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
115c0 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
115d0 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
115e0 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
115f0 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
11600 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
11610 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
11620 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
11630 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
11640 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
11650 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
11660 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
11670 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
11680 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
11690 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
116a0 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
116b0 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
116c0 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
116d0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
116e0 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
116f0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
11700 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
11710 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
11720 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
11730 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
11740 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
11750 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
11760 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
11770 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
11780 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
11790 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
117a0 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
117b0 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
117c0 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
117d0 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
117e0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
117f0 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
11800 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
11810 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
11820 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
11830 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
11840 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
11850 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
11860 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
11870 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
11880 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
11890 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
118a0 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
118b0 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
118c0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
118d0 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
118e0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
118f0 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
11900 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
11910 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
11920 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
11930 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
11940 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
11950 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
11960 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
11970 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
11980 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
11990 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
119a0 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
119b0 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
119c0 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
119d0 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f  y..** .** The fo
119e0 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
119f0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
11a00 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
11a10 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
11a20 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
11a30 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
11a40 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
11a50 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
11a60 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
11a70 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
11a80 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
11a90 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
11aa0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
11ab0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
11ac0 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
11ad0 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
11ae0 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
11af0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
11b00 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
11b10 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
11b20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
11b30 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
11b40 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
11b50 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
11b60 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
11b70 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
11b80 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
11b90 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
11ba0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
11bb0 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
11bc0 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
11bd0 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
11be0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
11bf0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
11c00 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
11c10 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
11c20 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
11c30 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
11c40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
11c50 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
11c60 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
11c70 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
11c80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
11c90 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
11ca0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
11cb0 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
11cc0 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
11cd0 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
11ce0 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
11cf0 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
11d00 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
11d10 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
11d20 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
11d30 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
11d40 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
11d50 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11d60 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
11d70 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
11d80 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
11d90 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
11da0 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
11db0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
11dc0 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73  the .** comparis
11dd0 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
11de0 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
11df0 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
11e00 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
11e10 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
11e20 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
11e30 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
11e40 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
11e50 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
11e60 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
11e70 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
11e80 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
11e90 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
11ea0 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
11eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11ec0 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
11ed0 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
11ee0 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
11ef0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
11f00 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
11f10 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
11f20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
11f30 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
11f40 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
11f50 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
11f60 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
11f70 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
11f80 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
11f90 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11fa0 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
11fb0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
11fc0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
11fd0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
11fe0 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
11ff0 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
12000 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
12010 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
12020 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
12030 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
12040 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
12050 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
12060 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
12070 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
12080 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
12090 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
120a0 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
120b0 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
120c0 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
120d0 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
120e0 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
120f0 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
12100 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
12110 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
12120 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
12130 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
12140 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
12150 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
12160 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
12170 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
12180 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
12190 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
121a0 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
121b0 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
121c0 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
121d0 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
121e0 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
121f0 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
12200 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
12210 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
12220 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
12230 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
12240 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
12250 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
12260 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
12270 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
12280 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
12290 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
122a0 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
122b0 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
122c0 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
122d0 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
122e0 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
122f0 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
12300 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
12310 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
12320 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
12330 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
12340 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
12350 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
12360 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
12370 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
12380 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
12390 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
123a0 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
123b0 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
123c0 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
123d0 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
123e0 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
123f0 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
12400 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
12410 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
12420 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
12430 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
12440 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
12450 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
12460 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
12470 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
12480 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
12490 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
124a0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
124b0 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
124c0 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
124d0 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
124e0 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
124f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
12500 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
12510 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
12520 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
12530 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
12540 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
12550 73 65 74 20 74 6f 20 2d 31 20 74 6f 20 0a 2a 2a  set to -1 to .**
12560 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
12570 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
12580 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
12590 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
125a0 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
125b0 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
125c0 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
125d0 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
125e0 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
125f0 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
12600 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
12610 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
12620 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
12630 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
12640 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
12650 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
12660 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
12670 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
12680 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
12690 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
126a0 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
126b0 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
126c0 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
126d0 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
126e0 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
126f0 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
12700 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
12710 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
12720 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
12730 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
12740 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
12750 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
12760 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
12770 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
12780 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
12790 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
127a0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
127b0 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
127c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
127d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
127e0 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
127f0 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
12800 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
12810 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
12820 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
12830 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
12840 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
12850 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
12860 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
12870 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
12880 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
12890 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
128a0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
128b0 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
128d0 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
128e0 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
128f0 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
12900 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
12910 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
12920 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
12930 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
12940 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
12950 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
12960 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
12970 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
12980 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12990 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
129a0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
129b0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
129c0 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
129d0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
129e0 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
129f0 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
12a00 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
12a10 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
12a20 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
12a30 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
12a40 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
12a50 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
12a60 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
12a70 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
12a80 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
12a90 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
12aa0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
12ab0 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
12ac0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
12ad0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
12ae0 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
12af0 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
12b00 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
12b10 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
12b20 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
12b30 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
12b40 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
12b50 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
12b60 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
12b70 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
12b80 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
12b90 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
12ba0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
12bb0 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
12bc0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
12bd0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
12be0 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
12bf0 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
12c00 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
12c10 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
12c20 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12c30 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
12c40 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
12c50 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
12c60 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
12c70 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
12c80 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12c90 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
12ca0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
12cb0 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
12cc0 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
12cd0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
12ce0 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
12cf0 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
12d00 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
12d10 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
12d20 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
12d30 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
12d40 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
12d50 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
12d60 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
12d70 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
12d80 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
12d90 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
12da0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
12db0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
12dc0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
12dd0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
12de0 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
12df0 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
12e00 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
12e10 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
12e20 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
12e30 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
12e40 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
12e50 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
12e60 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
12e70 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
12e80 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
12e90 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
12ea0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
12eb0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
12ec0 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
12ed0 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
12ee0 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
12ef0 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
12f00 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
12f10 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
12f20 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
12f30 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
12f40 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
12f50 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
12f60 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
12f70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
12f80 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
12f90 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
12fa0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
12fb0 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
12fc0 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
12fd0 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
12fe0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
12ff0 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
13000 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13010 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13020 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
13030 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
13040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
13050 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
13060 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
13070 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
13080 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
13090 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
130a0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
130b0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
130c0 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
130d0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
130e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
130f0 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
13100 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
13110 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
13120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
13130 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
13140 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
13150 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
13160 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
13170 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
13180 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
13190 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
131a0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
131b0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
131c0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
131d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
131e0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
131f0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
13200 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
13210 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
13220 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
13230 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
13240 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
13250 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
13260 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
13270 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
13280 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
13290 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
132a0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
132b0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
132c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
132d0 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
132e0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
132f0 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
13320 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
13330 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
13340 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
13350 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
13360 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
13370 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
13380 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
13390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
133a0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
133b0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
133c0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
133d0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
133e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
133f0 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
13400 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
13410 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
13420 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
13430 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
13440 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
13450 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
13460 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
13470 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
13480 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
13490 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
134a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
134b0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
134c0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
134d0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
134e0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
134f0 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
13500 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
13510 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
13520 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
13530 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
13540 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
13550 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
13560 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
13570 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
13580 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
13590 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
135a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
135b0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
135c0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
135d0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
135e0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
135f0 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
13600 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
13610 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13620 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
13630 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
13640 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13650 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
13660 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
13670 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
13680 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
13690 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
136a0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
136b0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
136c0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
136d0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
136e0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
136f0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
13700 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
13710 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
13720 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
13730 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
13740 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13750 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
13760 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
13770 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
13780 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
13790 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
137a0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
137b0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
137c0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
137d0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
137e0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
137f0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13800 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
13810 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13820 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
13830 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
13840 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
13850 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
13860 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
13870 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
13880 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
13890 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
138a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
138b0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
138c0 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
138d0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
138e0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
138f0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
13900 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
13910 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
13920 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
13930 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
13940 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
13950 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
13960 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
13970 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
13980 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
13990 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
139a0 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
139b0 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
139c0 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
139d0 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e  None)../* The In
139e0 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76  dex.aiColumn[] v
139f0 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c  alues are normal
13a00 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ly positive inte
13a10 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65  ger.  But.** the
13a20 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61  re are some nega
13a30 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74  tive values that
13a40 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
13a50 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e  aning:.*/.#defin
13a60 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28  e XN_ROWID     (
13a70 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -1)     /* Index
13a80 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ed column is the
13a90 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
13aa0 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28  e XN_EXPR      (
13ab0 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -2)     /* Index
13ac0 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  ed column is an 
13ad0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f  expression */../
13ae0 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
13af0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
13b00 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
13b10 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
13b20 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
13b30 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
13b40 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
13b50 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
13b60 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
13b70 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
13b80 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
13b90 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
13ba0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
13bb0 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
13bc0 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
13bd0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
13be0 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
13bf0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
13c00 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
13c10 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
13c20 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
13c30 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
13c40 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
13c50 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
13c60 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
13c70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
13c80 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
13c90 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
13ca0 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
13cb0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
13cc0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
13cd0 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
13ce0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
13cf0 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
13d00 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
13d10 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
13d20 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
13d30 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
13d40 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
13d50 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
13d60 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
13d70 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
13d80 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
13d90 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
13da0 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
13db0 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
13dc0 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
13dd0 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
13de0 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
13df0 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
13e00 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
13e10 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
13e20 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
13e30 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
13e40 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
13e50 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
13e60 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
13e70 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
13e80 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
13e90 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
13ea0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
13eb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13ec0 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
13ed0 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
13ee0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
13ef0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
13f00 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
13f10 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
13f20 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
13f30 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
13f40 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
13f50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13f60 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
13f70 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
13f80 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
13f90 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
13fa0 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
13fb0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
13fc0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
13fd0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
13fe0 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
13ff0 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
14000 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
14010 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
14020 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
14030 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
14040 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
14050 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
14060 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
14070 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
14080 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
14090 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
140a0 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
140b0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
140c0 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
140d0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
140e0 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
140f0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
14100 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
14110 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
14120 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
14130 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
14140 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
14150 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
14160 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
14170 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
14180 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
141b0 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
141c0 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
141d0 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
141e0 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
141f0 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
14200 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
14210 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
14220 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
14230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14240 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
14250 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
14260 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
14270 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
14280 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
14290 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
142a0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
142b0 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
142c0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
142d0 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
142e0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
142f0 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
14300 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14310 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
14320 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
14330 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
14340 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
14350 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
14360 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
14370 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
14380 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
14390 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
143a0 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
143b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
143c0 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
143d0 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
143e0 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
143f0 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
14400 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
14410 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
14420 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
14430 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
14440 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
14450 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
14460 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
14470 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
14480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
14490 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
144a0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
144b0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
144c0 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
144d0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
144e0 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
144f0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
14500 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
14510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
14520 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
14530 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
14540 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
14550 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
14560 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
14570 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
14580 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
14590 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
145a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
145b0 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
145c0 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
145d0 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
145e0 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
145f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
14600 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
14610 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
14640 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
14650 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
14660 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
14690 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
146a0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
146b0 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
146c0 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
146d0 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
146e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
146f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
14700 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
14710 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
14720 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
14730 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
14740 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
14750 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
14760 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
14770 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
14780 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
14790 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
147a0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
147b0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
147c0 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
147d0 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
147e0 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
147f0 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
14800 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
14810 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
14820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14830 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14840 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
14850 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
14860 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
14870 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
14880 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
14890 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
148a0 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
148b0 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
148c0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
148d0 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
148e0 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
148f0 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
14900 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
14910 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
14920 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
14930 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
14940 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
14950 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
14960 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
14970 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
14980 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
14990 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
149a0 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
149b0 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
149c0 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
149d0 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
149e0 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
149f0 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
14a00 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
14a10 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
14a20 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
14a30 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
14a40 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
14a50 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
14a60 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
14a70 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
14a80 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14a90 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
14aa0 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
14ab0 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
14ac0 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
14ad0 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
14ae0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
14af0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
14b00 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
14b10 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
14b20 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
14b30 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
14b40 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
14b50 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
14b60 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
14b70 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
14b80 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
14b90 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
14ba0 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
14bb0 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
14bc0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
14bd0 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
14be0 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
14bf0 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
14c00 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
14c10 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
14c20 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
14c30 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
14c40 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
14c50 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
14c60 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14c70 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
14c80 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
14c90 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f  , TK_BLOB, .** o
14ca0 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
14cb0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14cc0 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
14cd0 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
14ce0 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
14cf0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
14d00 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
14d10 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
14d20 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14d30 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  he .** variable 
14d40 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
14d50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14d60 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
14d70 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
14d80 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
14d90 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14da0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
14db0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
14dc0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
14dd0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
14de0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
14df0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
14e00 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
14e10 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
14e20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
14e30 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
14e40 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
14e50 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
14e60 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14e70 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
14e80 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
14e90 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
14ea0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
14eb0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
14ec0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
14ed0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
14ee0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
14ef0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14f00 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
14f10 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
14f20 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
14f30 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
14f40 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
14f50 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
14f60 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
14f70 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
14f80 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
14f90 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
14fa0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
14fb0 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20  .x.pList is .** 
14fc0 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
14fd0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
14fe0 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
14ff0 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
15000 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
15010 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
15020 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
15030 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
15040 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
15050 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
15060 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
15070 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
15080 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
15090 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
150a0 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
150b0 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
150c0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
150d0 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
150e0 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
150f0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
15100 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
15110 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
15120 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
15130 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
15140 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
15150 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
15160 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
15170 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
15180 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
15190 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
151a0 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
151b0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
151c0 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
151d0 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
151e0 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
151f0 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74  mark .** charact
15200 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
15210 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
15220 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
15230 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
15240 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20   .** number for 
15250 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
15260 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
15270 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
15280 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
15290 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
152a0 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
152b0 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
152c0 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
152d0 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
152e0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
152f0 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
15300 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
15310 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
15320 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
15330 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
15340 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
15350 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
15360 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
15370 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
15380 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
15390 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
153a0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
153b0 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
153c0 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
153d0 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
153e0 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
153f0 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
15400 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
15410 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
15420 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
15430 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
15440 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
15450 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
15460 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
15470 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
15480 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
15490 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
154a0 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
154b0 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
154c0 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
154d0 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
154e0 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
154f0 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
15500 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
15510 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
15520 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
15530 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
15540 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
15550 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
15560 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
15570 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
15580 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
15590 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
155a0 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
155b0 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
155c0 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
155d0 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
155e0 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
155f0 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
15600 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
15610 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
15620 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
15630 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
15640 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
15650 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
15660 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
15670 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
15680 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
15690 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
156a0 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
156b0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
156c0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
156d0 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
156e0 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
156f0 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
15700 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
15710 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
15720 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
15730 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
15740 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
15750 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
15760 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
15770 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
15780 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
15790 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
157a0 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
157b0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
157c0 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
157d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
157e0 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
157f0 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
15800 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
15810 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
15820 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
15830 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
15840 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
15850 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
15860 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
15870 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
15880 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
15890 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
158a0 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
158b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
158c0 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
158d0 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
158e0 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
158f0 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
15900 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15910 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
15920 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
15930 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
15940 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
15950 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
15960 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
15970 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
15980 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
15990 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
159a0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
159b0 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a  alfunction. .  *
159c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
159f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15a00 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
15a10 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
15a20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
15a30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
15a40 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
15a50 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
15a60 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
15a70 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
15a80 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
15a90 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
15aa0 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
15ab0 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
15ac0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
15ad0 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
15ae0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
15af0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
15b00 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
15b10 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
15b20 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
15b30 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
15b40 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
15b50 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
15b60 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
15b70 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
15b80 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
15b90 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
15ba0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
15bb0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
15bc0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
15bd0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
15be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15c10 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
15c20 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
15c30 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
15c40 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
15c50 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
15c60 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
15c70 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
15c80 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
15c90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
15ca0 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
15cb0 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
15cc0 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
15cf0 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
15d00 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
15d30 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
15d40 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
15d50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
15d60 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
15d70 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
15d80 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56  elihood */.  ynV
15d90 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
15da0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
15db0 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
15dc0 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
15df0 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
15e00 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
15e10 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20  >= 1). */.  i16 
15e20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  iAgg;           
15e30 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72     /* Which entr
15e40 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61  y in pAggInfo->a
15e50 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63  Col[] or ->aFunc
15e60 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67  [] */.  i16 iRig
15e70 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f  htJoinTable;   /
15e80 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  * If EP_FromJoin
15e90 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c  , the right tabl
15ea0 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  e of the join */
15eb0 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20  .  u8 op2;      
15ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
15ed0 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e  REGISTER: origin
15ee0 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
15ef0 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15f10 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
15f20 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
15f30 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
15f60 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
15f70 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
15f80 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
15f90 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
15fa0 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
15fb0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
15fc0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
15fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
15fe0 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20  e for TK_COLUMN 
15ff0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a  expressions. */.
16000 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
16010 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
16020 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
16030 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
16040 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
16050 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
16060 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
16070 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
16080 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
16090 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
160a0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
160b0 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
160c0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
160d0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
160e0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
160f0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
16100 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
16110 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
16120 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
16130 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
16140 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a       0x000008 /*
16150 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
16160 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
16170 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
16180 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
16190 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
161a0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
161b0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
161c0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
161d0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
161e0 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
161f0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
16200 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
16210 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
16220 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
16230 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
16240 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
16250 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
16260 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
16270 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
16280 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
16290 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
162a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
162b0 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
162c0 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
162d0 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
162e0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
162f0 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
16300 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
16310 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
16320 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
16330 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
16340 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
16350 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
16360 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
16370 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
16380 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
16390 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
163a0 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
163b0 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
163c0 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
163d0 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
163e0 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
163f0 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
16400 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
16410 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
16420 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
16430 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
16440 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
16450 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
16460 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
16470 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
16480 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
16490 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
164a0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
164b0 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
164c0 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
164d0 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
164e0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
164f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
16500 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
16510 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
16520 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
16530 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
16540 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
16550 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
16560 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
16570 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
16580 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
16590 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
165a0 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
165b0 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
165c0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
165d0 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38  P_ConstFunc 0x08
165e0 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45  0000 /* A SQLITE
165f0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f  _FUNC_CONSTANT o
16600 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74  r _SLOCHNG funct
16610 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
16620 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30  P_CanBeNull 0x10
16630 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e  0000 /* Can be n
16640 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20  ull despite NOT 
16650 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
16660 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75  */.#define EP_Su
16670 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30  bquery  0x200000
16680 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
16690 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70  s a TK_SELECT op
166a0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
166b0 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30  e EP_Alias     0
166c0 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e  x400000 /* Is an
166d0 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73   alias for a res
166e0 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a  ult set column *
166f0 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61  /../*.** Combina
16700 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20  tions of two or 
16710 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a  more EP_* flags.
16720 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
16730 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
16740 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29  ate|EP_Subquery)
16750 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68   /* Propagate th
16760 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65  ese bits up tree
16770 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65   */../*.** These
16780 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
16790 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
167a0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
167b0 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e  in the .** Expr.
167c0 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
167d0 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
167e0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
167f0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
16800 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
16810 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
16820 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
16830 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
16840 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
16850 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
16860 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
16870 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
16880 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
16890 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
168a0 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
168b0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
168c0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
168d0 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
168e0 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
168f0 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
16900 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
16910 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
16920 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
16930 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
16940 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
16950 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
16960 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
16970 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
16980 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
16990 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
169a0 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
169b0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
169c0 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
169d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
169e0 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
169f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
16a00 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
16a10 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a   normal Expr .**
16a20 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
16a30 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
16a40 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
16a50 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
16a60 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  gs .** and an Ex
16a70 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
16a80 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
16a90 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
16aa0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
16ab0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
16ac0 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
16ad0 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
16ae0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
16af0 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
16b00 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
16b10 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
16b20 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
16b30 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
16b40 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
16b50 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
16b60 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
16b70 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
16b80 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
16b90 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
16ba0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
16bb0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
16bc0 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62  r comment .** ab
16bd0 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
16be0 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
16bf0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
16c00 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
16c10 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
16c20 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
16c30 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
16c40 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
16c50 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
16c60 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
16c70 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
16c80 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
16c90 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
16ca0 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
16cb0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
16cc0 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
16cd0 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
16ce0 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
16cf0 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
16d00 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
16d10 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
16d20 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
16d30 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
16d40 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
16d50 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
16d60 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
16d70 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
16d80 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
16d90 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
16da0 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
16db0 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
16dc0 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
16dd0 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
16de0 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
16df0 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
16e00 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
16e10 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
16e20 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
16e30 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
16e40 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
16e50 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
16e60 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
16e70 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
16e80 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
16e90 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
16ea0 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
16eb0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
16ec0 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
16ed0 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
16ee0 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
16ef0 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
16f00 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
16f10 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
16f20 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
16f30 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
16f40 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
16f50 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
16f60 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
16f70 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
16f80 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
16f90 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
16fa0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16fb0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
16fc0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
16fd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
16fe0 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
16ff0 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
17000 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
17010 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
17020 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
17030 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
17040 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17050 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
17060 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
17070 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
17080 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17090 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
170a0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
170b0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
170c0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
170d0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
170e0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
170f0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
17100 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
17110 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
17120 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
17130 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
17140 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
17150 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
17160 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
17170 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
17180 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
17190 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
171a0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
171b0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
171c0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
171d0 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
171e0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
171f0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
17200 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
17210 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
17220 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
17230 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
17240 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
17250 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
17260 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
17270 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
17280 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
17290 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
172a0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
172b0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
172c0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
172d0 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
172e0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
172f0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
17300 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
17310 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20   } u;.  } *a;   
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17330 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
17340 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
17350 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
17360 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
17370 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
17380 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
17390 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
173a0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
173b0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
173c0 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
173d0 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
173e0 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
173f0 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
17400 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
17410 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
17420 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
17430 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
17440 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
17450 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
17460 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
17470 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
17480 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
17490 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
174a0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
174b0 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
174c0 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
174d0 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
174e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
174f0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
17500 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
17510 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
17520 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
17530 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
17540 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
17550 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
17560 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
17570 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
17580 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
17590 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
175a0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
175b0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
175c0 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
175d0 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
175e0 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
175f0 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
17600 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
17610 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
17620 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
17630 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
17640 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
17650 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
17660 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
17670 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
17680 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
17690 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
176a0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
176b0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
176c0 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
176d0 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
176e0 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
176f0 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
17700 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
17710 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
17720 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
17730 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
17740 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
17750 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
17760 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
17770 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
17780 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
17790 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
177a0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
177b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
177c0 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
177d0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
177e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
177f0 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
17800 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
17810 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
17820 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
17830 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
17840 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
17850 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
17860 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
17870 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
17880 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
17890 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
178a0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
178b0 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
178c0 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
178d0 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
178e0 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
178f0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
17900 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
17910 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
17920 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
17930 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
17940 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
17950 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
17960 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
17970 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
17980 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
17990 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
179a0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
179b0 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
179c0 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
179d0 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
179e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
179f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
17a00 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
17a10 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
17a20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
17a30 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
17a40 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
17a50 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
17a60 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
17a70 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
17a80 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
17a90 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
17aa0 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
17ab0 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
17ac0 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
17ad0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
17ae0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
17af0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
17b00 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
17b10 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
17b20 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
17b30 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
17b40 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
17b50 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
17b60 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
17b70 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
17b80 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
17b90 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
17ba0 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
17bb0 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
17bc0 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
17bd0 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
17be0 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
17bf0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
17c00 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
17c10 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
17c20 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
17c30 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
17c40 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
17c50 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
17c60 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
17c70 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
17c80 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
17c90 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
17ca0 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
17cb0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
17cc0 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
17cd0 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
17ce0 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
17cf0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
17d00 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
17d10 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
17d20 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
17d30 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
17d40 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
17d50 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
17d60 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
17d70 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
17d80 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
17d90 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
17da0 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
17db0 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
17dc0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
17dd0 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
17de0 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
17df0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
17e00 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
17e10 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
17e20 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
17e30 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
17e40 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
17e50 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
17e60 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
17e70 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
17e80 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
17e90 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
17ea0 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
17eb0 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
17ec0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
17ed0 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
17ee0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
17ef0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
17f00 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
17f10 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
17f20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
17f30 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
17f40 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
17f50 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
17f60 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
17f70 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
17f80 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
17f90 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
17fa0 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
17fb0 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
17fc0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
17fd0 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
17fe0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
17ff0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
18000 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
18010 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
18020 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
18030 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
18040 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
18050 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
18060 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
18070 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
18080 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
18090 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
180a0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
180b0 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
180c0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
180d0 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
180e0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
180f0 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
18100 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
18110 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
18120 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
18130 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
18140 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18150 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
18160 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
18170 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
18180 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
18190 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
181a0 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
181b0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
181c0 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
181d0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
181e0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
181f0 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
18200 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
18210 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
18220 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
18230 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
18240 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
18250 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
18260 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
18270 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
18280 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
18290 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
182a0 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
182b0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
182c0 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
182d0 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
182e0 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
182f0 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
18300 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
18310 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
18320 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
18330 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
18340 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
18350 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
18360 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
18370 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
18380 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
18390 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
183a0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
183b0 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
183c0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
183d0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
183e0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
183f0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
18400 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
18410 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
18420 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
18430 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
18440 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
18450 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
18460 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
18470 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
18480 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
18490 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
184a0 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
184b0 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
184c0 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
184d0 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
184e0 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
184f0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
18500 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
18510 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
18520 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
18530 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
18540 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
18550 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
18560 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
18570 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
18580 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
18590 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
185a0 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
185b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
185c0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
185d0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
185e0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
185f0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
18600 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
18610 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
18620 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
18630 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
18640 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
18650 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
18660 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
18670 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
18680 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
18690 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
186a0 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
186b0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
186c0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
186d0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
186e0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
186f0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
18700 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
18710 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
18720 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
18730 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
18740 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
18750 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
18760 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
18770 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
18780 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
18790 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
187a0 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
187b0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
187c0 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
187d0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
187e0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
187f0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
18800 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
18810 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
18820 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
18830 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
18840 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
18850 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
18860 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
18870 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
18880 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
18890 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
188a0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
188b0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
188c0 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
188d0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
188e0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
188f0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
18900 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
18910 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
18920 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
18930 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
18940 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
18950 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
18960 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
18970 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
18980 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
18990 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
189a0 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
189b0 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
189c0 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
189d0 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
189e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
189f0 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
18a00 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
18a10 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
18a20 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
18a30 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
18a40 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
18a50 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
18a60 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
18a70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
18a80 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f  ne WHERE_NO_AUTO
18a90 49 4e 44 45 58 20 20 20 20 20 30 78 30 30 38 30  INDEX     0x0080
18aa0 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74   /* Disallow aut
18ab0 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
18ac0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18ad0 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
18ae0 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
18af0 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
18b00 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
18b10 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
18b20 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30  CTBY       0x020
18b30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
18b40 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
18b50 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
18b60 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
18b70 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34  DISTINCT    0x04
18b80 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
18b90 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
18ba0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
18bb0 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
18bc0 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f  UP      0x0800 /
18bd0 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
18be0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
18bf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18c00 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20  E_REOPEN_IDX    
18c10 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79     0x1000 /* Try
18c20 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65   to use OP_Reope
18c30 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nIdx */.#define 
18c40 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55  WHERE_ONEPASS_MU
18c50 4c 54 49 52 4f 57 20 30 78 32 30 30 30 20 2f 2a  LTIROW 0x2000 /*
18c60 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77   ONEPASS is ok w
18c70 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
18c80 73 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  s */../* Allowed
18c90 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
18ca0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
18cb0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
18cc0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
18cd0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
18ce0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
18cf0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
18d00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18d10 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
18d20 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
18d30 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
18d40 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
18d50 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
18d60 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
18d70 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
18d80 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18d90 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
18da0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
18db0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
18dc0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
18dd0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
18de0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
18df0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
18e00 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
18e10 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
18e20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
18e30 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
18e40 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
18e50 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
18e60 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
18e70 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
18e80 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
18e90 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
18ea0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
18eb0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
18ec0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
18ed0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
18ee0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
18ef0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
18f00 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
18f10 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
18f20 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
18f30 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
18f40 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
18f50 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
18f60 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
18f70 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
18f80 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
18f90 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
18fa0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
18fb0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
18fc0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
18fd0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
18fe0 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
18ff0 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
19000 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
19010 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
19020 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
19030 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
19040 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
19050 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
19060 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
19070 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
19080 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
19090 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
190a0 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
190b0 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
190c0 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
190d0 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
190e0 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
190f0 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
19100 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
19110 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
19120 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
19130 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
19140 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
19150 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
19160 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
19170 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
19180 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
19190 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
191a0 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
191b0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
191c0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
191d0 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
191e0 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
191f0 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
19200 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
19210 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
19220 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
19230 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
19240 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
19250 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
19260 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
19270 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
19280 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
19290 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
192a0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
192b0 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
192c0 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
192d0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
192e0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
192f0 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
19300 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
19310 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
19320 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
19330 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
19340 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
19350 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
19360 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
19370 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
19380 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19390 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
193a0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
193b0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
193c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
193d0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
193e0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
193f0 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
19400 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
19410 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
19420 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
19430 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
19440 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
19450 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
19460 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
19470 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
19480 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  field..**.** Not
19490 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  e:  NC_MinMaxAgg
194a0 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73   must have the s
194b0 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f  ame value as SF_
194c0 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a  MinMaxAgg and.**
194d0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
194e0 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66  MAX..** .*/.#def
194f0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
19500 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
19510 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19520 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
19530 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
19540 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
19550 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
19560 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19570 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
19580 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
19590 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
195a0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
195b0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
195c0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
195d0 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
195e0 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
195f0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
19600 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
19610 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
19620 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
19630 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
19640 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
19650 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
19660 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
19670 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
19680 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
19690 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
196a0 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
196b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
196c0 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
196d0 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
196e0 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
196f0 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
19700 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19710 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
19720 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
19730 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
19740 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
19750 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
19760 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
19770 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19780 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
19790 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
197a0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
197b0 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
197c0 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
197d0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
197e0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
197f0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
19800 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
19810 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
19820 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
19830 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
19840 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
19850 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
19860 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
19870 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
19880 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
19890 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
198a0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
198b0 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
198c0 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
198d0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
198e0 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
198f0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
19900 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
19910 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
19920 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
19930 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
19940 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
19950 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
19960 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
19970 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
19980 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
19990 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
199a0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
199b0 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
199c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
199d0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
199e0 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
199f0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
19a00 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
19a10 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
19a20 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
19a30 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
19a40 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
19a50 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
19a60 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
19a70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
19a80 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
19a90 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
19aa0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
19ab0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
19ac0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
19ad0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
19ae0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
19af0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
19b00 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
19b10 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
19b20 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
19b30 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
19b40 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
19b50 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
19b60 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
19b70 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
19b80 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
19b90 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
19ba0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
19bb0 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
19bc0 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
19bd0 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
19be0 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
19bf0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
19c00 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
19c10 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
19c20 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
19c30 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
19c40 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
19c50 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
19c60 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
19c70 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
19c80 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
19c90 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
19ca0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
19cb0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
19cc0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
19cd0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
19ce0 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
19cf0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
19d00 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
19d10 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
19d20 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
19d30 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
19d40 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
19d50 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
19d60 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
19d70 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
19d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19d90 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
19da0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
19db0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
19dc0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
19dd0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
19de0 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
19df0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
19e00 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
19e10 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
19e20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
19e30 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
19e40 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
19e50 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
19e60 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
19e70 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
19e80 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
19e90 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
19ea0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
19eb0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
19ec0 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
19ed0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
19ee0 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
19ef0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
19f00 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
19f10 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
19f20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
19f30 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
19f40 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
19f50 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
19f60 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
19f70 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
19f80 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
19f90 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
19fa0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
19fb0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
19fc0 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
19fd0 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
19fe0 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
19ff0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
1a000 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1a010 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
1a020 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1a030 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1a040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1a050 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ll             0
1a060 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  x0002  /* Includ
1a070 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1a080 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1a090 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1a0a0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e   0x0004  /* Iden
1a0b0 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1a0c0 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1a0d0 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1a0e0 74 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20  te       0x0008 
1a0f0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1a100 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a110 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
1a120 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
1a130 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74  x0010  /* Uses t
1a140 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
1a150 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
1a160 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
1a170 20 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a        0x0020  /*
1a180 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
1a190 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
1a1a0 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
1a1b0 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
1a1c0 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46      0x0040  /* F
1a1d0 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
1a1e0 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
1a1f0 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
1a200 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
1a210 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74   0x0080  /* Part
1a220 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
1a230 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
1a240 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
1a250 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79     0x0100  /* Sy
1a260 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
1a270 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
1a280 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
1a290 56 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30  Value      0x020
1a2a0 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
1a2b0 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
1a2c0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
1a2d0 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
1a2e0 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30  From      0x0400
1a2f0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
1a300 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
1a310 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
1a320 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1a330 65 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f  ert    0x0800  /
1a340 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1a350 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1a360 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1a370 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
1a380 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
1a390 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
1a3a0 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
1a3b0 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
1a3c0 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
1a3d0 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54      0x2000  /* T
1a3e0 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
1a3f0 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
1a400 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
1a410 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1a420 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79     0x4000  /* By
1a430 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1a440 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1a450 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1a460 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1a470 20 30 78 38 30 30 30 20 20 2f 2a 20 49 6e 63 6c   0x8000  /* Incl
1a480 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1a490 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1a4a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1a4b0 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1a4c0 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1a4d0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1a4e0 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1a4f0 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1a500 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1a510 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1a520 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1a530 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1a540 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1a550 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1a560 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1a570 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1a580 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20  ry index .**    
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
1a5b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1a5c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
1a5d0 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
1a5e0 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
1a5f0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1a600 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1a610 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1a620 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
1a630 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
1a640 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
1a650 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
1a660 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a670 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
1a680 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
1a690 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
1a6a0 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
1a6b0 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
1a6c0 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
1a6d0 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
1a6e0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1a6f0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1a700 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
1a710 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
1a740 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
1a750 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
1a760 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
1a770 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
1a780 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
1a790 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
1a7a0 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
1a7b0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1a7c0 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1a7d0 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
1a7e0 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
1a7f0 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
1a800 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
1a810 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1a820 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
1a830 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
1a840 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
1a850 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a860 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
1a870 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
1a880 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
1a890 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
1a8c0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
1a8d0 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
1a8e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a8f0 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
1a900 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1a910 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
1a920 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1a940 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
1a950 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
1a960 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
1a970 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
1a980 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
1a990 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
1a9a0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
1a9b0 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
1a9e0 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
1a9f0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1aa00 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  rm. .**         
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1aa20 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1aa30 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1aa40 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1aa70 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1aa80 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1aa90 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1aaa0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1aab0 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1aac0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1aad0 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1aae0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1aaf0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1ab00 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1ab10 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1ab20 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ab40 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1ab50 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1ab60 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1ab90 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1aba0 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1abb0 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1abd0 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1abe0 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1abf0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1ac00 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1ac10 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1ac20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ac40 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1ac50 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1ac60 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1ac70 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ac80 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1ac90 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1aca0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1acb0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1ace0 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1acf0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1ad00 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1ad30 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1ad40 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1ad50 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1ad60 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1ad70 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1ad80 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1ad90 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1ada0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1adb0 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1adc0 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1add0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ade0 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1adf0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1ae00 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1ae10 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1ae30 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1ae40 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1ae50 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1ae80 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1ae90 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1aea0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1aeb0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1aec0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1aed0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1aef0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1af00 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1af10 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1af40 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1af50 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1af60 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1af90 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1afa0 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1afb0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1afc0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1afd0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1afe0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1aff0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1b010 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1b020 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1b030 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1b040 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1b060 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1b070 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1b080 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1b090 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1b0a0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1b0b0 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1b0e0 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1b0f0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1b100 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b120 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1b130 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1b140 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1b150 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1b160 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1b170 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1b180 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1b190 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1b1a0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1b1b0 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1b1c0 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1b1d0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1b1e0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1b1f0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1b200 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1b210 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1b220 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1b230 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1b240 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1b250 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1b260 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1b270 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1b280 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1b290 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1b2a0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1b2b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1b2c0 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1b2d0 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1b2e0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1b2f0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1b300 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1b310 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1b320 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1b330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b340 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1b350 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1b360 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1b370 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1b380 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1b390 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1b3a0 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1b3b0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1b3c0 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1b3d0 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1b3e0 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1b3f0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1b400 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1b410 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1b420 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1b430 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1b440 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1b450 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1b460 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1b470 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1b480 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1b490 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1b4a0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1b4b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1b4c0 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1b4d0 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1b4e0 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1b4f0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1b500 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1b510 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1b520 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1b530 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1b540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b550 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1b560 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1b570 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1b580 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1b590 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1b5a0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1b5b0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1b5c0 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1b5d0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1b5e0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1b5f0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1b600 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1b610 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1b620 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1b630 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1b640 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1b650 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
1b660 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
1b670 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1b680 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1b690 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
1b6a0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1b6b0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1b6c0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1b6d0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1b6e0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1b6f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1b700 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1b710 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1b720 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1b730 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1b740 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1b750 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1b760 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
1b770 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1b780 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1b790 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1b7a0 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1b7b0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1b7c0 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1b7d0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1b7e0 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1b7f0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1b800 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
1b810 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1b820 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1b830 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1b840 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1b850 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1b860 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1b870 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1b880 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1b890 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1b8a0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1b8b0 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1b8c0 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1b8d0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1b8e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1b8f0 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1b900 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
1b910 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1b920 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1b930 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1b940 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1b950 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1b960 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1b970 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1b980 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1b990 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1b9a0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1b9b0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1b9c0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1b9d0 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1b9e0 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1b9f0 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1ba00 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1ba10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1ba20 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1ba30 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1ba40 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1ba50 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1ba60 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1ba70 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1ba80 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1ba90 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1baa0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1bab0 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1bac0 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1bad0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1bae0 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1baf0 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1bb00 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1bb10 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1bb20 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1bb30 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1bb40 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1bb50 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1bb60 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1bb70 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1bb80 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
1bb90 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1bba0 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1bbb0 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1bbc0 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1bbd0 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1bbe0 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1bbf0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1bc00 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1bc10 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1bc20 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1bc30 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1bc40 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1bc50 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1bc60 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1bc70 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1bc80 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1bc90 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1bca0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1bcb0 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1bcc0 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1bcd0 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1bce0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1bcf0 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1bd00 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1bd10 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1bd20 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1bd30 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1bd40 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1bd50 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1bd60 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1bd70 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1bd80 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1bd90 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1bda0 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1bdb0 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1bdc0 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1bdd0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1bde0 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1bdf0 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1be00 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1be10 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1be20 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1be30 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
1be40 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1be50 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1be60 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1be70 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1be80 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1be90 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1bea0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1beb0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1bec0 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1bed0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1bee0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1bef0 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1bf00 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1bf10 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1bf20 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1bf30 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1bf40 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1bf50 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1bf60 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1bf70 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1bf80 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1bf90 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1bfa0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1bfb0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1bfc0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1bfd0 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1bfe0 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1bff0 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1c000 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1c010 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1c020 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1c030 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1c040 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1c050 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1c060 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1c070 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1c080 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1c090 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1c0a0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1c0b0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1c0c0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1c0d0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1c0e0 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1c0f0 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1c100 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1c110 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1c120 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1c130 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1c140 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1c150 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1c160 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1c170 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1c180 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1c190 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1c1a0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1c1b0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1c1c0 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1c1d0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1c1e0 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1c1f0 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1c200 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1c210 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1c220 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1c230 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1c240 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1c250 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1c260 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1c270 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1c280 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1c290 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1c2a0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1c2b0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1c2c0 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1c2d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1c2e0 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1c2f0 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1c300 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1c310 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1c320 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1c330 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1c340 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1c350 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1c360 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1c370 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1c380 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1c390 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1c3a0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1c3b0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1c3c0 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1c3d0 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1c3e0 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1c3f0 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1c400 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1c410 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1c420 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1c430 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1c440 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1c450 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1c460 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1c470 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1c480 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1c490 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1c4a0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1c4b0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1c4c0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1c4d0 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1c4e0 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
1c4f0 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1c500 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1c510 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1c520 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1c530 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1c540 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1c550 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1c560 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1c570 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1c580 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1c590 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1c5a0 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1c5b0 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1c5c0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1c5d0 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1c5e0 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1c5f0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1c600 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1c610 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1c620 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1c630 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1c640 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1c650 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1c660 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1c670 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1c680 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1c690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1c6a0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1c6b0 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1c6c0 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1c6d0 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1c6e0 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1c6f0 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1c700 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1c710 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1c720 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1c730 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1c740 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1c750 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1c760 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c770 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1c780 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1c790 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1c7a0 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1c7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c7c0 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1c7d0 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1c7e0 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1c7f0 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1c800 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1c810 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1c820 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1c830 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1c840 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1c850 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1c860 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1c870 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1c880 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1c890 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1c8a0 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1c8b0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1c8c0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1c8d0 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1c8e0 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1c8f0 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1c900 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e  onstants */.  in
1c910 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1c920 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1c930 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1c940 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1c950 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1c960 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1c970 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1c980 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1c990 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1c9a0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1c9b0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1c9c0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1c9d0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1c9e0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1c9f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1ca00 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1ca10 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1ca20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1ca30 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1ca40 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1ca50 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1ca60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ca70 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1ca80 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1ca90 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1caa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1cab0 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1cac0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1cad0 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
1cae0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1caf0 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
1cb00 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
1cb10 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1cb20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cb30 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1cb40 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1cb50 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65  ] */.  int iFixe
1cb60 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dOp;        /* N
1cb70 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70  ever back out op
1cb80 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31  codes iFixedOp-1
1cb90 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20   or earlier */. 
1cba0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1cbb0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1cbc0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1cbd0 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1cbe0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1cbf0 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1cc00 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e    /* Table of an
1cc10 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70   index whose exp
1cc20 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1cc30 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ed */.  int iCac
1cc40 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1cc50 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1cc60 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1cc70 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1cc80 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1cc90 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1cca0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1ccb0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1ccc0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1ccd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1cce0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1ccf0 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1cd00 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1cd10 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1cd20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1cd30 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73  he labels */.  s
1cd40 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1cd50 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1cd60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1cd70 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1cd80 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1cd90 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1cda0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1cdb0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1cdc0 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1cdd0 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1cde0 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1cdf0 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1ce00 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1ce10 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1ce20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1ce30 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1ce40 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1ce50 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
1ce60 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
1ce70 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
1ce80 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cea0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
1ceb0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
1cec0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
1ced0 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
1cee0 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
1cef0 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
1cf00 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
1cf10 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
1cf20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
1cf30 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
1cf40 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1cf50 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
1cf60 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
1cf70 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
1cf80 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
1cf90 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
1cfa0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
1cfb0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
1cfc0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
1cfd0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
1cfe0 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
1cff0 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
1d000 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
1d010 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
1d020 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ses */.  int coo
1d030 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f  kieValue[SQLITE_
1d040 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b  MAX_ATTACHED+2];
1d050 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63    /* Values of c
1d060 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79  ookies to verify
1d070 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
1d080 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
1d090 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1d0a0 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
1d0b0 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
1d0c0 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
1d0d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1d0e0 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
1d0f0 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
1d100 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
1d110 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
1d120 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
1d130 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
1d140 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
1d150 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45  rogram */.#if SE
1d160 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1d170 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b  D.  int nSelect;
1d180 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d190 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61  er of SELECT sta
1d1a0 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a  tements seen */.
1d1b0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64    int nSelectInd
1d1c0 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61  ent;   /* How fa
1d1d0 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45  r to indent SELE
1d1e0 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74  CTTRACE() output
1d1f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
1d200 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
1d210 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
1d220 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
1d230 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d240 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
1d250 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
1d260 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
1d270 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
1d280 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
1d290 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1d2a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
1d2b0 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
1d2c0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1d2d0 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
1d2e0 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
1d2f0 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  .  /* Informatio
1d300 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64  n used while cod
1d310 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67  ing trigger prog
1d320 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65  rams. */.  Parse
1d330 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
1d340 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
1d350 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
1d360 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
1d370 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
1d380 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
1d390 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
1d3a0 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
1d3b0 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
1d3c0 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
1d3d0 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54  ss of OP_CreateT
1d3e0 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  able opcode on C
1d3f0 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1d400 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1d410 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1d420 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1d430 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1d440 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1d450 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1d460 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1d470 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1d480 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1d490 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1d4a0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1d4b0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1d4c0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1d4d0 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1d4e0 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1d4f0 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1d500 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1d510 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1d520 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1d530 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1d540 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1d550 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1d560 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1d570 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1d580 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1d590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d5a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d5b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d5d0 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1d5e0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1d5f0 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1d600 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1d610 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1d620 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1d630 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1d640 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1d650 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1d660 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1d670 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1d680 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1d690 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1d6a0 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1d6b0 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1d6c0 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1d6d0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1d6e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d6f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1d720 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d740 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1d750 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1d760 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1d770 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d790 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1d7a0 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1d7b0 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1d7c0 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1d7d0 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1d7e0 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1d7f0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1d800 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
1d810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d820 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
1d830 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
1d840 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
1d850 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d860 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1d870 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61  .  u8 declareVta
1d880 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
1d890 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73  True if inside s
1d8a0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1d8b0 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  tab() */.  int n
1d8c0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
1d8d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d8e0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
1d8f0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
1d900 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b  if.  int nAlias;
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d920 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61  * Number of alia
1d930 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63  sed result set c
1d940 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  olumns */.  int 
1d950 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
1d960 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
1d970 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
1d980 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
1d990 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
1d9a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1d9b0 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65  LAIN.  int iSele
1d9c0 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  ctId;           
1d9d0 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e   /* ID of curren
1d9e0 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50  t select for EXP
1d9f0 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20  LAIN output */. 
1da00 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74   int iNextSelect
1da10 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Id;        /* Ne
1da20 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c  xt available sel
1da30 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41  ect ID for EXPLA
1da40 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  IN output */.#en
1da50 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56  dif.  char **azV
1da60 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1da70 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e  /* Pointers to n
1da80 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65  ames of paramete
1da90 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
1daa0 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
1dab0 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
1dac0 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
1dad0 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
1dae0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1daf0 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
1db00 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
1db10 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
1db20 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
1db30 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
1db40 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1db50 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
1db60 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
1db70 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
1db80 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
1db90 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
1dba0 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
1dbb0 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
1dbc0 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
1dbd0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1dbe0 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
1dbf0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
1dc00 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
1dc10 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
1dc20 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  eToken;         
1dc30 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
1dc40 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
1dc50 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
1dc60 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
1dc70 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1dc80 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
1dc90 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
1dca0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1dcb0 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
1dcc0 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
1dcd0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
1dce0 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
1dcf0 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
1dd00 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
1dd10 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
1dd20 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
1dd30 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
1dd40 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
1dd50 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
1dd60 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
1dd70 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
1dd80 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
1dd90 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
1dda0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1ddb0 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
1ddc0 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
1ddd0 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
1dde0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1de00 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c   Current WITH cl
1de10 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1de20 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f  .  With *pWithTo
1de30 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Free;        /* 
1de40 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f  Free this WITH o
1de50 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64  bject at the end
1de60 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f   of the parse */
1de70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  .};../*.** Retur
1de80 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
1de90 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
1dea0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1deb0 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
1dec0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1ded0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1dee0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1def0 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
1df00 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1df10 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
1df20 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
1df30 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1df40 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1df50 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1df60 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
1df70 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
1df80 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
1df90 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
1dfa0 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
1dfb0 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
1dfc0 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
1dfd0 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
1dfe0 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
1dff0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1e000 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
1e010 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
1e020 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
1e030 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1e040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e050 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
1e060 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
1e070 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
1e080 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
1e090 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
1e0a0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  s..*/.#define OP
1e0b0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
1e0c0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65     0x01    /* Se
1e0d0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1e0e0 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69  nChange */.#defi
1e0f0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
1e100 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
1e110 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
1e120 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
1e130 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
1e140 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1e150 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1e160 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1e170 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
1e180 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
1e190 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
1e1a0 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
1e1b0 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
1e1c0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
1e1d0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
1e1e0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
1e1f0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
1e200 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
1e210 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e220 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
1e230 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
1e240 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
1e250 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
1e260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e270 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1e280 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
1e290 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1e2a0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
1e2b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
1e2c0 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
1e2d0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1e2e0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1e2f0 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
1e300 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
1e310 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
1e320 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
1e330 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
1e340 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
1e350 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
1e360 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
1e370 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
1e380 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
1e390 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1e3a0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1e3b0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1e3c0 4f 50 5f 4f 70 65 6e 20 69 73 20 6f 70 65 6e 69  OP_Open is openi
1e3d0 6e 67 20 66 6f 72 2d 64 65 6c 65 74 65 20 63 73  ng for-delete cs
1e3e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1e3f0 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1e400 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
1e410 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1e420 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1e430 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1e440 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1e450 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1e460 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1e470 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1e480 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1e490 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1e4a0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1e4b0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1e4c0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1e4d0 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1e4e0 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1e4f0 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1e500 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1e510 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1e520 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1e530 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1e540 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1e550 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1e560 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1e570 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1e580 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1e590 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1e5a0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1e5b0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1e5c0 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1e5d0 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1e5e0 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1e5f0 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1e600 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1e610 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1e620 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1e630 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1e640 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1e650 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1e660 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1e670 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1e680 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1e690 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1e6a0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1e6b0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1e6c0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1e6d0 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1e6e0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1e6f0 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1e700 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1e710 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1e720 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1e730 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1e740 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1e750 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1e760 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1e770 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1e780 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1e7b0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1e7c0 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1e7d0 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1e7e0 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1e7f0 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1e820 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1e830 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1e840 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1e850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e860 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1e870 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1e880 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1e890 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1e8a0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1e8b0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1e8c0 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1e8d0 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1e8e0 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1e8f0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1e900 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1e910 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1e920 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1e950 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1e960 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1e970 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1e980 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1e990 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1e9a0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1e9b0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1e9c0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1e9d0 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1e9e0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1e9f0 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1ea00 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1ea10 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1ea20 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1ea30 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1ea40 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1ea50 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1ea60 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1ea70 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1ea80 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1ea90 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1eaa0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1eab0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1eac0 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1ead0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1eae0 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1eaf0 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1eb00 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1eb10 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1eb20 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1eb30 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1eb40 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1eb50 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1eb60 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1eb70 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1eb80 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1eb90 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1eba0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1ebb0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1ebc0 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1ebd0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1ebe0 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1ebf0 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1ec00 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1ec10 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1ec20 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1ec30 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1ec40 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1ec50 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1ec60 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1ec70 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1ec80 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1ec90 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1eca0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1ecb0 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1ecc0 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1ecd0 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1ece0 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1ecf0 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1ed00 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1ed10 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1ed20 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1ed30 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1ed40 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1ed50 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1ed60 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1ed70 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1ed80 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1ed90 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1eda0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1edb0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1edc0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1edd0 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1ede0 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1edf0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1ee00 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1ee10 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1ee20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1ee30 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1ee40 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1ee50 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1ee60 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1ee70 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1ee80 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1ee90 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1eea0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1eeb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1eec0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1eed0 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
1eee0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1eef0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1ef00 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
1ef10 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
1ef20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1ef30 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
1ef40 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
1ef50 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1ef60 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1ef70 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
1ef80 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
1ef90 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
1efa0 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
1efb0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1efc0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
1efd0 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
1efe0 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
1eff0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
1f000 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
1f010 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
1f020 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
1f030 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
1f040 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
1f050 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
1f060 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1f070 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1f080 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1f090 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1f0a0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1f0b0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1f0c0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1f0d0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1f0e0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1f0f0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1f100 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1f110 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1f120 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1f130 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1f140 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
1f150 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
1f160 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1f170 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
1f180 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
1f190 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1f1a0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1f1b0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1f1c0 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
1f1d0 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
1f1e0 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
1f1f0 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
1f200 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
1f210 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1f220 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
1f230 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
1f240 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
1f250 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
1f260 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
1f270 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
1f280 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1f290 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1f2a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1f2b0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1f2c0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1f2d0 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1f2e0 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1f2f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1f300 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1f310 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1f320 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1f330 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1f340 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1f350 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1f360 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1f370 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
1f380 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1f390 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
1f3a0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
1f3b0 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
1f3c0 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1f3d0 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1f3e0 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1f3f0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1f400 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1f410 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1f420 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1f430 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1f440 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1f450 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1f460 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1f470 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1f480 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1f490 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1f4a0 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1f4b0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1f4c0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1f4d0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1f4e0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1f4f0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1f500 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1f510 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1f520 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1f530 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1f540 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1f550 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1f560 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1f570 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1f580 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1f590 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1f5a0 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1f5b0 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1f5c0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1f5d0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1f5e0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1f5f0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1f600 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1f610 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1f620 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1f630 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1f640 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1f650 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1f660 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1f670 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1f680 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1f690 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1f6a0 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1f6b0 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1f6c0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1f6d0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1f6e0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1f6f0 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1f700 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1f710 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1f720 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1f730 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1f740 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1f750 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1f760 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1f770 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1f780 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1f790 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1f7a0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1f7b0 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1f7c0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1f7d0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1f7e0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1f7f0 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1f800 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1f810 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1f820 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1f830 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1f840 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1f850 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1f860 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1f870 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1f880 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1f890 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1f8a0 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1f8b0 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1f8c0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1f8d0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1f8e0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1f8f0 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1f900 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1f910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1f920 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1f930 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1f940 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1f950 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1f960 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1f970 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1f980 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1f990 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1f9a0 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
1f9b0 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
1f9c0 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38  oc usage */.  u8
1f9d0 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1f9e0 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1f9f0 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1fa00 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1fa10 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1fa20 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1fa30 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1fa40 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1fa50 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1fa60 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1fa70 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1fa80 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1fa90 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1faa0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1fab0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1fac0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1fad0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1fae0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1faf0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1fb00 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1fb10 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1fb20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1fb30 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1fb40 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1fb50 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1fb60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1fb70 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1fb80 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1fb90 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1fba0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1fbb0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1fbc0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1fbd0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1fbe0 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1fbf0 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1fc00 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1fc10 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1fc20 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1fc30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1fc40 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1fc50 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1fc60 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1fc70 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1fc80 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1fc90 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1fca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1fcb0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1fcc0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1fcd0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1fd00 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1fd10 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1fd20 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1fd30 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1fd40 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1fd50 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1fd60 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fd80 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1fd90 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1fda0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1fdb0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fdd0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1fde0 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1fdf0 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1fe00 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1fe10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1fe20 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1fe30 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
1fe40 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
1fe50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1fe60 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
1fe70 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
1fe80 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1fe90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fea0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1feb0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1fec0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1fed0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1fef0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1ff00 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1ff10 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1ff20 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1ff30 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1ff40 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1ff50 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1ff60 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1ff70 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1ff80 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1ff90 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1ffa0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1ffb0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1ffc0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1ffd0 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1ffe0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1fff0 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
20020 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
20030 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20050 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
20060 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
20070 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
20080 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
20090 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
200a0 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
200b0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
200c0 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
200d0 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
200e0 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
200f0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
20100 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
20110 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
20120 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
20130 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
20140 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
20150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
20160 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
20170 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20190 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
201a0 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
201b0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
201c0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
201d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
201e0 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
201f0 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
20200 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20220 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
20230 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
20240 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
20250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
20260 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
20270 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
20280 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
202b0 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
202c0 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
202d0 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
202e0 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
202f0 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
20300 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
20310 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
20320 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
20330 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
20340 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
20350 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
20360 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
20370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20380 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
20390 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
203a0 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
203b0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
203c0 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
203d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
203e0 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
203f0 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
20400 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
20410 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
20440 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
20450 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
20460 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
20470 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20480 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
20490 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
204a0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
204b0 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
204c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
204d0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
204e0 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
204f0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
20500 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20520 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
20530 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
20540 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
20550 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
20560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20570 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
20580 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
20590 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
205a0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
205b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205c0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
205d0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
205e0 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
205f0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
20600 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
20610 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
20620 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
20630 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
20640 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
20650 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
20660 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
20670 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
206a0 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
206b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
206c0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
206d0 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
206e0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
206f0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
20700 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
20710 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
20720 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
20730 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
20740 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
20750 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
20760 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
20770 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
20780 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
20790 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
207a0 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
207b0 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
207c0 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
207d0 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
207e0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
207f0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
20800 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
20810 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
20820 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20850 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
20860 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
20870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20880 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
20890 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
208a0 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
208b0 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
208c0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
208d0 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
208e0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
208f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
20900 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
20910 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
20920 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
20930 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
20940 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
20950 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
20960 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
20970 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
20980 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
20990 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
209a0 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
209b0 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
209c0 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
209d0 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
209e0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
209f0 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
20a00 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
20a10 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
20a20 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
20a30 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
20a40 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
20a50 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
20a60 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
20a70 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
20a80 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
20a90 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
20aa0 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
20ab0 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
20ac0 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
20ad0 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
20ae0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
20af0 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
20b00 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
20b10 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
20b20 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
20b30 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
20b40 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
20b50 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
20b60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
20b70 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
20b80 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
20b90 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
20ba0 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
20bb0 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
20bc0 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
20bd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
20be0 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
20bf0 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
20c00 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
20c10 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
20c20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
20c30 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
20c40 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
20c50 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
20c60 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
20c70 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
20c80 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
20c90 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
20ca0 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
20cb0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
20cc0 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
20cd0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
20d00 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
20d10 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20d40 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
20d50 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
20d80 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
20d90 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
20da0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
20dd0 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
20de0 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
20df0 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
20e20 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
20e30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
20e60 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
20e70 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
20e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e90 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
20ea0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
20eb0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
20ec0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
20ee0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
20ef0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
20f00 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
20f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20f20 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
20f30 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
20f40 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
20f50 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
20f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
20f70 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
20f80 48 69 6e 74 28 29 20 2a 2f 0a 20 20 7d 20 75 3b  Hint() */.  } u;
20f90 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
20fa0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
20fb0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
20fc0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
20fd0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20fe0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
20ff0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
21000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
21010 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
21020 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
21030 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
21040 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
21050 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
21060 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
21070 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
21080 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21090 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
210a0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f  ker*, Expr*);../
210b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
210c0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
210d0 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
210e0 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
210f0 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
21100 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
21110 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
21120 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
21130 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
21140 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
21150 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
21160 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
21170 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
21180 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
21190 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
211a0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
211b0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
211c0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
211d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
211e0 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
211f0 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
21200 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
21210 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
21220 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
21230 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
21240 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
21250 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
21260 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21290 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
212a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
212b0 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
212d0 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
212e0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
212f0 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
21300 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
21310 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
21320 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
21330 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
21340 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
21370 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
21380 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
213a0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
213b0 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
213c0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
213d0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
213f0 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
21400 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
21410 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
21420 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
21430 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
21440 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
21450 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
21460 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
21470 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21480 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
21490 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
214a0 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
214b0 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
214c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
214d0 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
214e0 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
214f0 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
21500 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
21510 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
21520 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
21530 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
21540 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
21550 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
21560 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
21570 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
21580 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
21590 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
215a0 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
215b0 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
215c0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
215d0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
215e0 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
215f0 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
21600 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
21610 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
21620 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
21630 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
21640 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
21650 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
21660 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21670 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21690 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
216a0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
216b0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216d0 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
216e0 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
216f0 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
21700 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21740 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
21750 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
21760 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
21770 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
21780 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
21790 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
217a0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
217b0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
217c0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
217d0 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
217e0 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
217f0 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
21800 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
21810 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
21820 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
21830 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
21840 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
21850 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
21860 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
21870 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
21880 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
21890 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
218a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
218b0 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
218c0 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
218d0 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
218e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
218f0 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
21900 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
21910 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
21920 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
21930 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
21940 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
21950 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
21960 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
21970 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
21980 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a  r(__LINE__).../*
21990 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
219a0 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
219b0 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
219c0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
219d0 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
219e0 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
219f0 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
21a00 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
21a10 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
21a20 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
21a30 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
21a40 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
21a50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
21a60 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
21a70 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
21a80 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
21a90 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
21aa0 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
21ab0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
21ac0 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
21ad0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
21ae0 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
21af0 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
21b00 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
21b10 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
21b20 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
21b30 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
21b40 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
21b50 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
21b60 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
21b70 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
21b80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
21b90 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
21ba0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
21bb0 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
21bc0 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
21bd0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
21be0 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
21bf0 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
21c00 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
21c10 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
21c20 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
21c30 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
21c40 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
21c50 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
21c60 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
21c70 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
21c80 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
21c90 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
21ca0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
21cb0 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
21cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
21cd0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
21ce0 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
21cf0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21d00 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
21d10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
21d20 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
21d30 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
21d40 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
21d50 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
21d60 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
21d70 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
21d80 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
21d90 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
21da0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
21db0 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
21dc0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
21dd0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
21de0 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
21df0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
21e00 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
21e10 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
21e20 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
21e30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
21e40 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
21e50 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
21e60 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
21e70 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
21e80 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
21e90 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
21ea0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
21eb0 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
21ec0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
21ed0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
21ee0 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
21ef0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
21f00 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
21f10 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
21f20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21f30 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
21f40 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
21f50 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
21f60 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
21f70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
21f80 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
21f90 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
21fa0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21fb0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
21fc0 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
21fd0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
21ff0 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
22000 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
22010 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
22020 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
22030 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
22040 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
22050 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
22060 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
22070 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
22080 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
22090 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66  Char(u8);.#endif
220a0 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
220b0 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
220c0 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ypes.*/.#define 
220d0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73  sqlite3StrICmp s
220e0 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69  qlite3_stricmp.i
220f0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
22100 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
22110 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
22120 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
22130 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
22140 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
22150 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
22160 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
22170 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
22180 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
22190 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
221a0 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
221b0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
221c0 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
221d0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
221e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
221f0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
22200 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
22210 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
22220 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
22230 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
22240 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
22250 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
22260 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
22270 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
22280 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
22290 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
222a0 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
222b0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
222c0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
222d0 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
222e0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
222f0 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
22300 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
22310 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
22320 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
22330 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
22340 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
22350 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
22360 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28  e3ScratchMalloc(
22370 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22380 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f  e3ScratchFree(vo
22390 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
223a0 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
223b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
223c0 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
223d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
223e0 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
223f0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
22400 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
22410 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ST.void sqlite3B
22420 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
22430 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
22440 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
22450 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
22460 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
22470 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
22480 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
22490 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
224a0 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
224b0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
224c0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
224d0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
224e0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
224f0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
22500 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
22510 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
22520 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
22530 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
22540 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
22550 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
22560 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
22570 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
22580 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
22590 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
225a0 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
225b0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
225c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
225d0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
225e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
225f0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
22600 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
22610 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
22620 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
22630 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
22640 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
22650 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
22660 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
22670 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22680 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
22690 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
226a0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
226b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
226c0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
226d0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
226e0 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
226f0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
22700 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
22710 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
22720 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
22730 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22740 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
22750 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
22760 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
22770 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
22780 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
22790 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
227a0 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
227b0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
227c0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
227d0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
227e0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
227f0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
22800 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
22810 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
22820 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
22830 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
22840 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
22850 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
22860 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
22870 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
22880 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
22890 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
228a0 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
228b0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
228c0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
228d0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
228e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
228f0 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
22900 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
22910 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
22920 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
22930 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
22940 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22950 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
22960 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
22970 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
22980 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
22990 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
229a0 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
229b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
229c0 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
229d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
229e0 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
229f0 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
22a00 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
22a10 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
22a20 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
22a30 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
22a40 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
22a50 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
22a60 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
22a70 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
22a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22a90 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
22aa0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
22ab0 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
22ac0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22ad0 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
22ae0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
22af0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
22b00 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
22b10 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
22b20 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
22b30 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
22b40 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
22b50 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
22b60 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
22b70 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
22b80 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
22b90 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
22ba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22bb0 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
22bc0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
22bd0 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
22be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22bf0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
22c00 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
22c10 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
22c20 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
22c30 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
22c40 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
22c50 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22c60 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
22c70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
22c80 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
22c90 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
22ca0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
22cb0 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
22cc0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
22cd0 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
22ce0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
22cf0 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
22d00 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
22d10 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
22d20 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22d30 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
22d40 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
22d50 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22d60 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
22d70 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22d80 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
22d90 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
22da0 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
22db0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
22dc0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
22dd0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
22de0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
22df0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
22e00 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
22e10 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
22e20 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
22e30 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
22e40 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
22e50 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
22e60 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
22e70 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
22e80 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
22e90 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
22ea0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
22eb0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
22ec0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
22ed0 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
22ee0 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
22ef0 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
22f00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22f10 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
22f20 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
22f30 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ith*, u8);.#endi
22f40 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
22f50 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
22f60 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
22f70 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22f80 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
22f90 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
22fa0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
22fb0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
22fc0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
22fd0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
22fe0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
22ff0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
23000 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
23010 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23020 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
23030 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
23040 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
23050 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
23060 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
23070 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
23080 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
23090 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
230a0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
230b0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
230c0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
230d0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
230e0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
230f0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
23100 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
23110 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
23120 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
23130 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
23140 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
23150 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
23160 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
23170 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23180 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
23190 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
231a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
231b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
231c0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
231d0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
231e0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
231f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
23200 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
23210 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
23220 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
23230 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
23240 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
23250 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
23260 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
23270 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
23280 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
23290 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
232a0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
232b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
232c0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
232d0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
232e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
232f0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
23300 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
23310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23320 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
23330 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
23340 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
23350 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
23360 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
23370 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
23380 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23390 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
233a0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
233b0 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
233c0 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
233d0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
233e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
233f0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
23400 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
23410 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
23420 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
23430 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
23440 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
23450 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23460 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
23470 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
23480 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
23490 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
234a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
234b0 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
234c0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
234d0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
234e0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
234f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
23500 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
23510 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
23520 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
23530 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
23540 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
23550 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
23560 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
23570 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
23580 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
23590 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
235a0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
235b0 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a  lumn**);.Table *
235c0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
235d0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
235e0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
235f0 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
23600 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
23610 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
23620 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
23630 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
23640 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
23650 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
23660 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23670 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
23680 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
23690 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
236a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
236b0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
236c0 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
236d0 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lumn*);.void sql
236e0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
236f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
23700 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
23710 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
23720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23730 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
23740 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
23750 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23760 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
23770 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
23780 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
23790 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
237a0 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
237b0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
237c0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
237d0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
237e0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
237f0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
23800 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
23810 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23820 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
23830 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
23840 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
23850 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
23860 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
23870 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
23880 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
23890 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
238a0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
238b0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
238c0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
238d0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
238e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
238f0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
23900 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
23910 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
23920 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
23930 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
23940 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
23950 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
23960 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
23970 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
23980 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
23990 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
239a0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
239b0 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
239c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
239d0 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
239e0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
239f0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
23a00 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
23a10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
23a20 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
23a30 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
23a40 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
23a50 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
23a60 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
23a70 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
23a80 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
23a90 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
23aa0 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
23ab0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
23ac0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
23ad0 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
23ae0 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
23af0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
23b00 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
23b10 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
23b20 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
23b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
23b40 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
23b50 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
23b60 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
23b70 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
23b80 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
23b90 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
23ba0 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
23bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
23bc0 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
23bd0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
23be0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
23bf0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
23c00 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
23c10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
23c20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
23c30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23c40 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
23c50 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
23c60 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
23c70 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
23c80 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
23c90 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
23ca0 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
23cb0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
23cc0 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
23cd0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
23ce0 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
23cf0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23d00 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
23d10 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
23d20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23d30 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
23d40 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
23d50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23d60 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
23d70 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
23d80 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
23d90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
23da0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
23db0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
23dc0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
23dd0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
23de0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
23df0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
23e00 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
23e10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23e20 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
23e30 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
23e40 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
23e50 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
23e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
23e70 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
23e80 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
23e90 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
23ea0 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
23eb0 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
23ec0 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
23ed0 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
23ee0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
23ef0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
23f00 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
23f10 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
23f20 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
23f30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
23f40 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
23f50 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
23f60 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
23f70 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
23f80 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
23f90 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
23fa0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
23fb0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
23fc0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
23fd0 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
23fe0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
23ff0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
24000 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
24030 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
24040 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
24050 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
24060 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
24070 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
24080 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
24090 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
240a0 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
240b0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
240c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
240d0 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
240e0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
240f0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
24100 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
24110 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
24120 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
24130 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
24140 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
24150 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
24160 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
24170 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
24180 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
24190 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
241a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
241b0 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
241c0 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
241d0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
241e0 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
241f0 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ar**);.Index *sq
24200 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
24210 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24220 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
24230 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
24240 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
24260 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
24270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
24280 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
24290 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
242a0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
242b0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
242c0 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
242d0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
242e0 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
242f0 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
24300 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
24310 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
24320 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
24330 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  r*,ExprList*,u16
24340 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76  ,Expr*,Expr*);.v
24350 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
24360 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
24370 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
24380 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
24390 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
243a0 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
243b0 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
243c0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
243d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
243e0 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
243f0 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
24400 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
24410 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
24420 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
24430 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
24440 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
24450 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
24460 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
24470 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
24480 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
24490 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
244a0 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  xpr*,Expr*,char*
244b0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
244c0 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
244d0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
244e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
244f0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
24500 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
24510 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
24520 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66  , int);.WhereInf
24530 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
24540 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
24550 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
24560 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
24570 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
24580 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
24590 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73  ereInfo*);.u64 s
245a0 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
245b0 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
245c0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
245d0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
245e0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
245f0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
24600 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
24610 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
24620 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
24630 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
24640 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
24650 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
24660 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
24670 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
24680 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
24690 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
246a0 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
246b0 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66  fo*, int*);.#def
246c0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20  ine ONEPASS_OFF 
246d0 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a       0        /*
246e0 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20   Use of ONEPASS 
246f0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  not allowed */.#
24700 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53  define ONEPASS_S
24710 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20  INGLE   1       
24720 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69   /* ONEPASS vali
24730 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  d for a single r
24740 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65  ow update */.#de
24750 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c  fine ONEPASS_MUL
24760 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f  TI    2        /
24770 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c  * ONEPASS is val
24780 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  id for multiple 
24790 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  rows */.void sql
247a0 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64  ite3ExprCodeLoad
247b0 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73  IndexColumn(Pars
247c0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
247d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
247e0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
247f0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
24800 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
24810 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
24820 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
24830 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28  eGetColumnToReg(
24840 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
24850 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
24860 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24870 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
24880 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
24890 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
248a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
248b0 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
248c0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
248d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
248e0 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
248f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
24900 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24910 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
24920 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
24930 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
24940 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Pop(Parse*);.voi
24950 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
24960 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
24970 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24980 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
24990 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
249a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
249b0 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
249c0 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
249d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
249e0 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
249f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
24a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24a10 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
24a20 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24a30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24a40 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
24a50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24a60 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
24a70 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
24a80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24a90 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
24aa0 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
24ab0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24ac0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24ad0 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
24ae0 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
24af0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
24b00 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
24b10 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
24b20 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
24b30 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
24b40 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
24b50 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
24b60 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
24b70 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
24b80 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
24b90 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
24ba0 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
24bb0 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69  t terms */.#defi
24bc0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52  ne SQLITE_ECEL_R
24bd0 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a  EF      0x04  /*
24be0 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e   Use ExprList.u.
24bf0 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
24c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24c10 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
24c20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
24c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24c40 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
24c50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
24c60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24c70 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
24c80 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
24c90 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
24ca0 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
24cb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
24cc0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24cd0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
24ce0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
24cf0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
24d00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
24d10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
24d20 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
24d30 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
24d40 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
24d50 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
24d60 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
24d70 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
24d80 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
24d90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24da0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
24db0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
24dc0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
24dd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
24de0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
24df0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
24e00 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
24e10 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
24e20 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
24e30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
24e40 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
24e50 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
24e60 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
24e70 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
24e80 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
24e90 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
24ea0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
24eb0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24ec0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
24ed0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
24ee0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
24ef0 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
24f00 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78  esExpr(Expr*, Ex
24f10 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
24f20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
24f30 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
24f40 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
24f50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24f60 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
24f70 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
24f80 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
24f90 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
24fa0 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
24fb0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
24fc0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
24fd0 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65  (Parse*);.#ifnde
24fe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
24ff0 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20  ILTIN_TEST.void 
25000 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
25010 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
25020 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
25030 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
25040 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
25050 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
25060 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
25070 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
25080 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
25090 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
250a0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
250b0 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
250c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
250d0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
250e0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
250f0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
25100 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
25110 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
25120 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
25130 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
25140 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
25150 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
25160 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
25170 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
25180 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
25190 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
251a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
251b0 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
251c0 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
251d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
251e0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
251f0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
25200 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
25210 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
25220 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25230 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
25240 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
25250 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25260 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
25270 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66  pr*,int);.#ifdef
25280 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
25290 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20  URSOR_HINTS.int 
252a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61  sqlite3ExprConta
252b0 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72  insSubquery(Expr
252c0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
252d0 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
252e0 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
252f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25300 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
25310 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
25320 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
25330 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
25340 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
25350 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
25360 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
25370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
25380 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
25390 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62  (.    Parse*,Tab
253a0 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
253b0 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
253c0 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  u8,u8,int);.void
253d0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
253e0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
253f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
25400 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
25410 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25420 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
25430 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
25440 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
25450 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
25460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25470 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
25480 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
25490 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
254a0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
254b0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
254c0 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
254d0 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
25500 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
25510 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
25520 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
25530 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
25540 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
25550 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
25560 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
25570 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
25580 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
25590 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
255a0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
255b0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
255c0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
255d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
255e0 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
255f0 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
25600 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
25610 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25620 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
25630 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
25640 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
25650 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
25660 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
25670 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
25680 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
25690 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
256a0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
256b0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
256c0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
256d0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
256e0 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
256f0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
25700 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
25710 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
25720 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
25730 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
25740 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
25750 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
25760 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
25770 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
25780 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
25790 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
257a0 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45  ct*,int);.#if SE
257b0 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
257c0 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  D.void sqlite3Se
257d0 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65  lectSetName(Sele
257e0 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ct*,const char*)
257f0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25800 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
25810 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69  tName(A,B).#endi
25820 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  f.void sqlite3Fu
25830 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
25840 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
25850 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
25860 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
25870 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
25880 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
25890 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
258a0 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
258b0 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
258c0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
258d0 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
258e0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
258f0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
25900 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
25910 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
25920 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
25930 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
25940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
25950 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
25960 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
25970 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
25980 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
25990 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
259a0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
259b0 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
259c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
259d0 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
259e0 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
259f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
25a00 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
25a10 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
25a20 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25a30 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
25a40 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
25a50 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
25a60 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
25a70 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a90 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
25aa0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
25ab0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
25ac0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
25ad0 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
25ae0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
25af0 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
25b00 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25b10 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
25b20 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
25b30 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
25b40 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
25b50 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
25b60 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
25b70 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
25b80 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
25b90 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
25ba0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
25bb0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
25bc0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
25bd0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
25be0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
25bf0 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
25c00 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
25c10 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25c30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
25c40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
25c50 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
25c60 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
25c70 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
25c80 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
25c90 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
25ca0 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
25cb0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
25cc0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
25cd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
25ce0 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
25cf0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
25d00 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
25d10 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
25d20 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
25d30 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
25d40 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
25d50 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
25d60 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
25d70 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
25d80 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
25db0 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
25dc0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
25dd0 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
25de0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
25df0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
25e00 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
25e10 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
25e20 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
25e30 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
25e40 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
25e50 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
25e60 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
25e70 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
25e80 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
25e90 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
25ea0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
25eb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
25ec0 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
25ed0 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
25ee0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
25ef0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
25f00 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
25f10 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
25f20 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
25f30 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
25f40 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
25f50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25f60 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
25f70 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
25f80 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
25f90 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
25fa0 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
25fb0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
25fc0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
25fd0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
25fe0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
25ff0 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
26000 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
26010 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
26020 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
26030 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
26040 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
26050 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
26060 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
26070 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
26080 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
26090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
260a0 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
260b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
260c0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
260d0 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
260e0 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
260f0 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
26100 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
26110 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
26120 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
26130 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
26140 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
26150 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
26160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
26170 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
26180 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
26190 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
261a0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
261b0 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
261c0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
261d0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
261e0 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
261f0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
26200 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
26210 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
26220 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
26230 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
26240 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
26250 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
26260 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
26270 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
26280 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
26290 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
262a0 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
262b0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
262c0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
262d0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
262e0 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
262f0 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
26300 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
26310 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
26320 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
26330 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
26340 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
26350 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26360 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
26370 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
26380 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
26390 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
263a0 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
263b0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
263c0 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
263d0 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
263e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
263f0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
26400 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
26410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
26420 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26430 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26440 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
26450 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
26460 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
26470 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
26480 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
26490 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
264a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
264b0 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
264c0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
264d0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
264e0 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
264f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
26500 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
26510 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
26520 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
26530 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
26540 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
26550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
26560 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
26570 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
26580 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26590 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
265a0 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
265b0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
265c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
265d0 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
265e0 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
265f0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
26600 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  r);.int sqlite3U
26610 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
26620 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
26630 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
26640 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
26650 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
26660 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
26670 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
26680 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
26690 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
266a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
266b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
266c0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
266d0 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
266e0 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36  uble);.#endif.u6
266f0 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
26700 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f  oInt(LogEst);../
26710 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
26720 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
26730 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
26740 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
26750 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
26760 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
26770 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
26780 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
26790 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
267a0 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
267b0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
267c0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
267d0 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
267e0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
267f0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
26800 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
26810 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
26820 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
26830 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
26840 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
26850 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
26860 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
26870 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
26880 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
26890 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
268a0 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
268b0 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
268c0 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
268d0 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
268e0 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
268f0 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
26900 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
26910 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
26920 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
26930 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
26940 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
26950 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
26960 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
26970 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
26980 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
26990 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
269a0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
269b0 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
269c0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
269d0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
269e0 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
269f0 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
26a00 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
26a10 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
26a20 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
26a30 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
26a40 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
26a50 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
26a60 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
26a70 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
26a80 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
26a90 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
26aa0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
26ab0 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
26ac0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
26ad0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
26ae0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
26af0 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
26b00 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
26b10 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
26b20 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
26b30 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
26b40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
26b50 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
26b60 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
26b70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
26b80 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
26b90 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
26ba0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
26bb0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
26bc0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
26bd0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
26be0 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
26bf0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
26c00 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
26c10 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
26c20 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
26c30 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
26c40 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
26c50 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
26c60 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
26c70 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
26c80 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
26c90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
26ca0 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
26cb0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
26cc0 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
26cd0 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
26ce0 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
26cf0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26d00 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
26d10 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
26d20 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
26d30 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
26d40 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
26d50 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53  har*,int);.CollS
26d60 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
26d70 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
26d80 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
26d90 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
26da0 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
26db0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
26dc0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
26dd0 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
26de0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
26df0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
26e00 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
26e10 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
26e20 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
26e30 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
26e40 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
26e50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
26e60 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
26e70 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
26e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
26e90 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
26ea0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
26eb0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
26ec0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
26ed0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
26ee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
26ef0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
26f00 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
26f10 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
26f20 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
26f30 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
26f40 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
26f50 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
26f60 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
26f70 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
26f80 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
26f90 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
26fa0 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
26fb0 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
26fc0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
26fd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26fe0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
26ff0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
27000 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
27010 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
27020 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
27030 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
27040 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
27050 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
27060 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
27070 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
27080 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
27090 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
270a0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
270b0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
270c0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
270d0 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
270e0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
270f0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
27100 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
27110 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
27120 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
27130 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
27140 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
27150 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
27160 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
27170 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
27180 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
27190 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
271a0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
271b0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
271c0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
271d0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
271e0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
271f0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
27200 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
27210 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
27220 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
27230 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
27240 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
27250 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
27260 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
27270 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
27280 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
27290 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
272a0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
272b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
272c0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
272d0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
272e0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
272f0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
27300 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
27310 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
27320 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
27330 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
27340 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
27350 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
27360 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
27370 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
27380 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
27390 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
273a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
273b0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
273c0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
273d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
273e0 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
273f0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
27400 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
27410 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
27420 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
27430 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
27440 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
27450 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
27460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
27470 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
27480 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
27490 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
274a0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
274b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
274c0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
274d0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
274e0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
274f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
27500 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
27510 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
27520 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27530 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
27540 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
27550 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
27560 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27570 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
27580 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
27590 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
275a0 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
275b0 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
275c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
275d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
275e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
275f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
27600 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
27610 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
27620 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27630 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
27640 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
27650 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
27660 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
27670 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
27680 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
27690 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
276a0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
276b0 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
276c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
276d0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
276e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
276f0 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
27700 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
27710 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
27720 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
27730 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
27740 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
27750 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
27760 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
27770 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
27780 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
27790 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
277a0 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
277b0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
277c0 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
277d0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
277e0 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
277f0 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
27800 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
27810 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
27820 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
27830 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
27840 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
27850 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
27860 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
27870 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
27880 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
27890 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
278a0 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
278b0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
278c0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
278d0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
278e0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
278f0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
27900 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
27910 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
27920 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
27930 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
27940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
27950 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
27960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27970 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
27980 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
27990 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
279a0 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
279b0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
279c0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
279d0 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46   sqlite3MinimumF
279e0 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a  ileFormat(Parse*
279f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27a00 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
27a10 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
27a20 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
27a30 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
27a40 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
27a50 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
27a60 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
27a70 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
27a80 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
27a90 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
27aa0 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
27ab0 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
27ac0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
27ad0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
27ae0 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
27af0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
27b00 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
27b10 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
27b20 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
27b30 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
27b40 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
27b50 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
27b60 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
27b70 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
27b80 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
27b90 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
27ba0 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
27bb0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
27bc0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
27bd0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
27be0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
27bf0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
27c00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
27c10 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
27c20 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
27c30 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
27c40 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
27c50 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
27c60 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
27c70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27c80 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
27c90 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
27ca0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
27cb0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
27cc0 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a   sqlite3*, char*
27cd0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27ce0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
27cf0 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
27d00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
27d10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27d20 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
27d30 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
27d40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
27d50 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72  qlite3AppendChar
27d60 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63  (StrAccum*,int,c
27d70 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  har);.char *sqli
27d80 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
27d90 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
27da0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
27db0 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
27dc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27dd0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
27de0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
27df0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
27e00 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
27e10 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
27e20 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
27e30 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
27e40 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
27e50 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
27e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
27e70 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
27e80 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
27e90 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
27ea0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27eb0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
27ec0 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
27ed0 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
27ee0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
27ef0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
27f00 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e  tValue(Parse*,In
27f10 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
27f20 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69  ord**,Expr*,u8,i
27f30 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
27f40 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
27f50 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
27f60 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
27f70 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
27f80 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
27f90 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
27fa0 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
27fb0 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
27fc0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
27fd0 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
27fe0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
27ff0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
28000 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
28010 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e  to the LEMON-gen
28020 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f  erated parser.*/
28030 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
28040 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
28050 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73  *)(u64));.void s
28060 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
28070 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
28080 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
28090 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
280a0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
280b0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
280c0 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
280d0 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
280e0 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
280f0 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
28100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
28110 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
28120 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
28130 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
28140 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
28150 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
28160 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
28170 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
28180 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
28190 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
281a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
281b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
281c0 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
281d0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
281e0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
281f0 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
28200 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
28210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
28220 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
28230 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
28240 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
28250 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
28260 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
28270 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
28280 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
28290 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
282a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
282b0 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
282c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
282d0 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
282e0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
282f0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
28300 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
28310 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
28320 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
28330 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
28340 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
28350 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
28360 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  ) .#  define sql
28370 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
28380 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
28390 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
283a0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
283b0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
283c0 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
283d0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
283e0 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
283f0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
28400 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
28410 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
28420 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
28430 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
28440 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
28450 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
28460 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
28470 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
28480 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
28490 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
284a0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
284b0 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
284c0 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
284d0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
284e0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
284f0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
28500 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
28510 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
28520 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
28530 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
28540 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
28550 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
28560 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
28570 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
28580 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
28590 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
285a0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
285b0 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
285c0 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
285d0 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
285e0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
285f0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
28600 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
28610 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
28620 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
28630 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
28640 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
28650 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
28660 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
28670 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28680 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
28690 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
286a0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
286b0 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
286c0 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
286d0 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
286e0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
286f0 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
28700 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
28710 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
28720 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
28730 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
28740 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
28750 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
28760 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28770 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
28780 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
28790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
287a0 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
287b0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
287c0 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
287d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
287e0 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
287f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
28800 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
28810 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
28820 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
28830 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
28840 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
28850 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
28860 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
28870 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
28880 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
28890 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
288a0 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
288b0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
288c0 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
288d0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
288e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
288f0 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
28900 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
28910 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
28920 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
28930 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
28940 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
28950 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
28960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
28970 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
28980 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
28990 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
289a0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
289b0 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
289c0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
289d0 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
289e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
289f0 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
28a00 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
28a10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
28a20 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
28a30 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
28a40 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
28a50 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
28a60 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
28a70 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
28a80 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
28a90 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
28aa0 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
28ab0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28ac0 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
28ad0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
28ae0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
28af0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
28b00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
28b10 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
28b20 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
28b30 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
28b40 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
28b50 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
28b60 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
28b70 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
28b80 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
28b90 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
28ba0 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
28bb0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
28bc0 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
28bd0 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
28be0 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
28bf0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
28c00 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
28c10 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
28c20 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
28c30 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
28c40 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
28c50 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
28c60 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
28c70 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
28c80 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
28c90 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
28ca0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
28cb0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
28cc0 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
28cd0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
28ce0 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
28cf0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
28d00 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
28d10 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
28d20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
28d30 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
28d40 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
28d50 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
28d60 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
28d70 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
28d80 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
28d90 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69  ity is .** provi
28da0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
28db0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
28dc0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
28dd0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
28de0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
28df0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28e00 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
28e10 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
28e20 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
28e30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
28e40 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
28e50 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
28e60 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
28e70 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
28e80 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
28e90 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
28ea0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28eb0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
28ec0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
28ed0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
28ee0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
28ef0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
28f00 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28f10 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
28f20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
28f30 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
28f40 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
28f50 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
28f60 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
28f70 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
28f80 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
28f90 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
28fa0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
28fb0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
28fc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
28fd0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
28fe0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28ff0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
29000 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
29010 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
29020 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
29030 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
29040 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
29050 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
29060 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
29070 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
29080 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
29090 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
290a0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
290b0 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
290c0 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
290d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
290e0 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
290f0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
29100 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
29110 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
29120 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
29130 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
29140 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
29150 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
29160 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
29170 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
29180 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
29190 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
291a0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
291b0 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
291c0 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
291d0 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
291e0 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
291f0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
29200 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
29210 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
29220 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
29230 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
29240 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
29250 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
29260 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29270 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
29280 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
29290 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
292a0 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
292b0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
292c0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
292d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
292e0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
292f0 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
29300 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
29310 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
29320 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
29330 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
29340 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  rom sqlite3FindI
29350 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66  nIndex().*/.#def
29360 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
29370 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a  ID        1   /*
29380 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69   Search the rowi
29390 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  d of the table *
293a0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
293b0 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
293c0 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e  2   /* Search an
293d0 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65   ephemeral b-tre
293e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
293f0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
29400 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69     3   /* Existi
29410 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49  ng index ASCENDI
29420 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
29430 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53  _INDEX_INDEX_DES
29440 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74  C   4   /* Exist
29450 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e  ing index DESCEN
29460 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
29470 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20  IN_INDEX_NOOP   
29480 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20        5   /* No 
29490 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e  table available.
294a0 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73   Use comparisons
294b0 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65   */./*.** Allowe
294c0 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  d flags for the 
294d0 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  3rd parameter to
294e0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
294f0 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dex()..*/.#defin
29500 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f  e IN_INDEX_NOOP_
29510 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  OK     0x0001  /
29520 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49  * OK to return I
29530 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a  N_INDEX_NOOP */.
29540 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
29550 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30  _MEMBERSHIP  0x0
29560 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  002  /* IN opera
29570 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d  tor used for mem
29580 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a  bership test */.
29590 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
295a0 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30  _LOOP        0x0
295b0 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  004  /* IN opera
295c0 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f  tor used as a lo
295d0 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  op */.int sqlite
295e0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
295f0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33  se *, Expr *, u3
29600 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65  2, int*);..#ifde
29610 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
29620 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69  ATOMIC_WRITE.  i
29630 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
29640 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
29650 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
29660 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
29670 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
29680 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
29690 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
296a0 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  fs *);.  int sql
296b0 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
296c0 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
296d0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
296e0 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71  JournalExists(sq
296f0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
29700 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
29710 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
29720 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
29730 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64  ->szOsFile).  #d
29740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
29750 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a  rnalExists(p) 1.
29760 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
29770 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
29780 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
29790 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
297a0 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f  emJournalSize(vo
297b0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
297c0 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c  IsMemJournal(sql
297d0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
297e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
297f0 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
29800 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29810 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
29820 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
29830 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
29840 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
29850 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
29860 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
29870 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
29880 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
29890 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
298a0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
298b0 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
298c0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
298d0 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
298e0 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
298f0 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
29900 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
29910 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
29920 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
29930 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
29940 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
29950 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29960 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
29970 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
29980 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29990 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
299a0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
299b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
299c0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
299d0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
299e0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
299f0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
29a00 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
29a10 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
29a20 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
29a30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29a40 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
29a50 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
29a60 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
29a70 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
29a80 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
29a90 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
29aa0 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
29ab0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
29ac0 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
29ad0 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
29ae0 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
29af0 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
29b00 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
29b10 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
29b20 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
29b30 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
29b40 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66  ages. .*/.#ifdef
29b50 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
29b60 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
29b70 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
29b80 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
29b90 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
29ba0 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
29bb0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
29bc0 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
29bd0 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54  E_API SQLITE_EXT
29be0 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45  ERN void (SQLITE
29bf0 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49  _CDECL *sqlite3I
29c00 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
29c10 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
29c20 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
29c30 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
29c40 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
29c50 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
29c60 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
29c70 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
29c80 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
29c90 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
29ca0 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
29cb0 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
29cc0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
29cd0 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
29ce0 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
29cf0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
29d00 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
29d10 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
29d20 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
29d30 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
29d40 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
29d50 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
29d60 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
29d70 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
29d80 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
29d90 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
29da0 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
29db0 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
29dc0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
29dd0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
29de0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
29df0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
29e00 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
29e10 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
29e20 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
29e30 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
29e40 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
29e50 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
29e60 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29e70 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
29e80 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
29e90 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
29ea0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
29eb0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
29ec0 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
29ed0 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
29ee0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
29ef0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
29f00 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
29f10 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
29f20 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
29f30 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
29f40 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
29f50 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
29f60 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
29f70 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
29f80 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
29f90 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
29fa0 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
29fb0 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
29fc0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
29fd0 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
29fe0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
29ff0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
2a000 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
2a010 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
2a020 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
2a030 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
2a040 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
2a050 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2a060 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
2a070 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
2a080 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2a090 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
2a0a0 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
2a0b0 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
2a0c0 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
2a0d0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2a0e0 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
2a0f0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
2a100 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
2a110 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
2a120 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2a130 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
2a140 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
2a150 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
2a160 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
2a170 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
2a180 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
2a190 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
2a1a0 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
2a1b0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
2a1c0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2a1d0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
2a1e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
2a1f0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
2a200 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2a210 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2a220 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2a230 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
2a240 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2a250 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2a260 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
2a270 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2a280 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2a290 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
2a2a0 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
2a2b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2a2c0 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
2a2d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2a2e0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
2a2f0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
2a300 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
2a310 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
2a320 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
2a330 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2a340 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
2a350 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
2a360 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
2a370 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
2a380 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
2a390 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48   MEMTYPE_SCRATCH
2a3a0 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72      0x04  /* Scr
2a3b0 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  atch allocations
2a3c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2a3d0 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
2a3e0 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x08  /* Page cac
2a3f0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
2a400 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
2a410 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
2a420 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
2a430 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
2a440 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
2a450 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
2a460 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
2a470 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
2a480 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
2a490 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
2a4a0 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
2a4b0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
2a4c0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
2a4d0 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64  BSTAT_VTAB) || d
2a4e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
2a4f0 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
2a500 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71  bstatRegister(sq
2a510 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
2a520 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
2a530 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.