/ Hex Artifact Content
Login

Artifact f97614d43833bae0ed6c51ac8e550f0099a1d0ba:


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 54 68  #endif../*.** Th
18f0: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
1900: 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65  P,S,E) macro che
1910: 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f  cks to see if po
1920: 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74  inter P points t
1930: 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62  o.** something b
1940: 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73  etween S (inclus
1950: 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c  ive) and E (excl
1960: 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e  usive)..**.** In
1970: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20   other words, S 
1980: 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20  is a buffer and 
1990: 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  E is a pointer t
19a0: 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
19b0: 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e   after.** the en
19c0: 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20  d of buffer S.  
19d0: 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72  This macro retur
19e0: 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69  ns true if P poi
19f0: 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  nts to something
1a00: 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  .** contained wi
1a10: 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  thin the buffer 
1a20: 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  S..*/.#if define
1a30: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
1a40: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a50: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 5c  _WITHIN(P,S,E) \
1a60: 0a 20 20 20 20 28 28 75 69 6e 74 70 74 72 5f 74  .    ((uintptr_t
1a70: 29 28 50 29 3e 3d 28 75 69 6e 74 70 74 72 5f 74  )(P)>=(uintptr_t
1a80: 29 28 53 29 20 26 26 20 28 75 69 6e 74 70 74 72  )(S) && (uintptr
1a90: 5f 74 29 28 50 29 3c 28 75 69 6e 74 70 74 72 5f  _t)(P)<(uintptr_
1aa0: 74 29 28 45 29 29 0a 23 65 6c 73 65 0a 23 20 64  t)(E)).#else.# d
1ab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
1ac0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 50 29 3e  HIN(P,S,E) ((P)>
1ad0: 3d 28 53 29 20 26 26 20 28 50 29 3c 28 45 29 29  =(S) && (P)<(E))
1ae0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1af0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
1b00: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
1b10: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
1b20: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
1b30: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1b40: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1b50: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1b60: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1b70: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1b80: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1b90: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1ba0: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30  & _MSC_VER>=1310
1bb0: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1bc0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65  E_NOINLINE  __de
1bd0: 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29  clspec(noinline)
1be0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
1bf0: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
1c10: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
1c20: 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69  e compiler intri
1c30: 6e 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20  nsics we desire 
1c40: 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e  are enabled when
1c50: 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69  .** compiling wi
1c60: 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  th an appropriat
1c70: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56  e version of MSV
1c80: 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74  C unless prevent
1c90: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c  ed by.** the SQL
1ca0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1cb0: 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f  INSIC define..*/
1cc0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1cd0: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54  LITE_DISABLE_INT
1ce0: 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65  RINSIC).#  if de
1cf0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
1d00: 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30  && _MSC_VER>=130
1d10: 30 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e  0.#    if !defin
1d20: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23  ed(_WIN32_WCE).#
1d30: 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69        include <i
1d40: 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20  ntrin.h>.#      
1d50: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
1d60: 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72  (_byteswap_ushor
1d70: 74 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  t).#      pragma
1d80: 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65   intrinsic(_byte
1d90: 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20  swap_ulong).#   
1da0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1db0: 73 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61  sic(_ReadWriteBa
1dc0: 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65  rrier).#    else
1dd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1de0: 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20  <cmnintrin.h>.# 
1df0: 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69     endif.#  endi
1e00: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e10: 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  The SQLITE_THREA
1e20: 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74  DSAFE macro must
1e30: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30   be defined as 0
1e40: 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20  , 1, or 2..** 0 
1e50: 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72  means mutexes ar
1e60: 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
1e70: 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69  sable and the li
1e80: 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a  brary is never.*
1e90: 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31  * threadsafe.  1
1ea0: 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61   means the libra
1eb0: 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64  ry is serialized
1ec0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69   which is the hi
1ed0: 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f  ghest.** level o
1ee0: 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20  f threadsafety. 
1ef0: 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62   2 means the lib
1f00: 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72  rary is multithr
1f10: 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65  eaded - multiple
1f20: 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20  .** threads can 
1f30: 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f  use SQLite as lo
1f40: 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72  ng as no two thr
1f50: 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20  eads try to use 
1f60: 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61  the same.** data
1f70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
1f80: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1f90: 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65  ..**.** Older ve
1fa0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
1fb0: 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61   used an optiona
1fc0: 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  l THREADSAFE mac
1fd0: 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72  ro..** We suppor
1fe0: 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63  t that for legac
1ff0: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
2000: 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ed(SQLITE_THREAD
2010: 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e  SAFE).# if defin
2020: 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23  ed(THREADSAFE).#
2030: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
2040: 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45  _THREADSAFE THRE
2050: 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20  ADSAFE.# else.# 
2060: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2070: 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20  THREADSAFE 1 /* 
2080: 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33  IMP: R-07272-223
2090: 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65  09 */.# endif.#e
20a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65  ndif../*.** Powe
20b0: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20  rsafe overwrite 
20c0: 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  is on by default
20d0: 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75  .  But can be tu
20e0: 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a  rned off using.*
20f0: 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50  * the -DSQLITE_P
2100: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
2110: 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  TE=0 command-lin
2120: 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  e option..*/.#if
2130: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45  ndef SQLITE_POWE
2140: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a  RSAFE_OVERWRITE.
2150: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2160: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
2170: 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ITE 1.#endif../*
2180: 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  .** EVIDENCE-OF:
2190: 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d   R-25715-37072 M
21a0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
21b0: 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
21c0: 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65  enabled by.** de
21d0: 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c  fault unless SQL
21e0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
21f0: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41  with SQLITE_DEFA
2200: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20  ULT_MEMSTATUS=0 
2210: 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65  in.** which case
2220: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2230: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2240: 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65  e disabled by de
2250: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  fault..*/.#if !d
2260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2270: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
2280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2290: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
22a0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
22b0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
22c0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
22d0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
22e0: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
22f0: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
2300: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
2310: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
2320: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
2330: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
2340: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2350: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
2360: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
2370: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
2380: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
2390: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
23a0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
23b0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
23c0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
23d0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
23e0: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
23f0: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
2400: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
2410: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
2420: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
2430: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
2440: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
2450: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
2460: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
2470: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
2480: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
2490: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
24a0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
24b0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
24c0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
24d0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
24e0: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
24f0: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
2500: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
2510: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
2520: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
2530: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
2540: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
2550: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f  red..**.** If no
2560: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
2570: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
2580: 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53  n set SQLITE_SYS
2590: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a  TEM_MALLOC as.**
25a0: 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f   the default..*/
25b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25c0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
25d0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
25e0: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
25f0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2600: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2610: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2620: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2630: 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72  DEBUG)>1.# error
2640: 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66   "Two or more of
2650: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
2660: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2670: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
2680: 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20  s\. are defined 
2690: 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  but at most one 
26a0: 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51  is allowed:\. SQ
26b0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
26c0: 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  OC, SQLITE_WIN32
26d0: 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f  _MALLOC, SQLITE_
26e0: 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49  MEMDEBUG,\. SQLI
26f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a  TE_ZERO_MALLOC".
2700: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2710: 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ed(SQLITE_SYSTEM
2720: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2730: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
2740: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  N32_MALLOC) \.  
2750: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2760: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  _ZERO_MALLOC) \.
2770: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a  TE_MEMDEBUG)==0.
2790: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27a0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a  SYSTEM_MALLOC 1.
27b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
27c0: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
27d0: 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74  OFT_LIMIT is not
27e0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20   zero, then try 
27f0: 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73  to keep the.** s
2800: 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61  izes of memory a
2810: 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77  llocations below
2820: 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72   this value wher
2830: 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23  e possible..*/.#
2840: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2850: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
2860: 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53  IMIT).# define S
2870: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2880: 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e  T_LIMIT 1024.#en
2890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65  dif../*.** We ne
28a0: 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f  ed to define _XO
28b0: 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f  PEN_SOURCE as fo
28c0: 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74  llows in order t
28d0: 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75  o enable.** recu
28e0: 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e  rsive mutexes on
28f0: 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65   most Unix syste
2900: 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20  ms and fchmod() 
2910: 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42  on OpenBSD..** B
2920: 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ut _XOPEN_SOURCE
2930: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
2940: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
2950: 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a  OS X, so omit.**
2960: 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   it..*/.#if !def
2970: 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52  ined(_XOPEN_SOUR
2980: 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
2990: 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21  __DARWIN__) && !
29a0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
29b0: 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f  _).#  define _XO
29c0: 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23  PEN_SOURCE 600.#
29d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45  endif../*.** NDE
29e0: 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44  BUG and SQLITE_D
29f0: 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74  EBUG are opposit
2a00: 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61  es.  It should a
2a10: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68  lways be true th
2a20: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44  at.** defined(ND
2a30: 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28  EBUG)==!defined(
2a40: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20  SQLITE_DEBUG).  
2a50: 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63  If this is not c
2a60: 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a  urrently true,.*
2a70: 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62  * make it true b
2a80: 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e  y defining or un
2a90: 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e  defining NDEBUG.
2aa0: 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e  .**.** Setting N
2ab0: 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20  DEBUG makes the 
2ac0: 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64  code smaller and
2ad0: 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62   faster by disab
2ae0: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65  ling the.** asse
2af0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
2b00: 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f  in the code.  So
2b10: 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66   we want the def
2b20: 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74  ault action.** t
2b30: 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20  o be for NDEBUG 
2b40: 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44  to be set and ND
2b50: 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66  EBUG to be undef
2b60: 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c  ined only if SQL
2b70: 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20  ITE_DEBUG.** is 
2b80: 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55  set.  Thus NDEBU
2b90: 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74  G becomes an opt
2ba0: 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20  -in rather than 
2bb0: 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65  an opt-out.** fe
2bc0: 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  ature..*/.#if !d
2bd0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
2be0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bf0: 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69  E_DEBUG) .# defi
2c00: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
2c10: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
2c20: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
2c30: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
2c40: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
2c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
2c60: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
2c70: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2c80: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
2c90: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
2ca0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2cb0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
2cc0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
2cd0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2ce0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
2cf0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
2d00: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d10: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
2d20: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
2d30: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2d40: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
2d50: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
2d60: 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72   .** doing cover
2d70: 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65  age testing, the
2d80: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64   condition insid
2d90: 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  e the argument t
2da0: 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20  o.** testcase() 
2db0: 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65  must be evaluate
2dc0: 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20  d both true and 
2dd0: 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74  false in order t
2de0: 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72  o.** get full br
2df0: 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20  anch coverage.  
2e00: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2e10: 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64  acro is inserted
2e20: 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75  .** to help ensu
2e30: 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74  re adequate test
2e40: 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61   coverage in pla
2e50: 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65  ces where simple
2e60: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65  .** condition/de
2e70: 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20  cision coverage 
2e80: 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20  is inadequate.  
2e90: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73  For example, tes
2ea0: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62  tcase().** can b
2eb0: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2ec0: 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c  ure boundary val
2ed0: 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20  ues are tested. 
2ee0: 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20   For.** bitmask 
2ef0: 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28  tests, testcase(
2f00: 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ) can be used to
2f10: 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20   make sure each 
2f20: 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66  bit.** is signif
2f30: 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61  icant and used a
2f40: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f  t least once.  O
2f50: 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  n switch stateme
2f60: 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c  nts.** where mul
2f70: 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74  tiple cases go t
2f80: 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b  o the same block
2f90: 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61   of code, testca
2fa0: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75  se().** can insu
2fb0: 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65  re that all case
2fc0: 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e  s are evaluated.
2fd0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
2fe0: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2ff0: 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
3000: 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a  3Coverage(int);.
3010: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
3020: 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73  e(X)  if( X ){ s
3030: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f  qlite3Coverage(_
3040: 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73  _LINE__); }.#els
3050: 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  e.# define testc
3060: 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ase(X).#endif../
3070: 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c  *.** The TESTONL
3080: 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  Y macro is used 
3090: 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61  to enclose varia
30a0: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
30b0: 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74   or.** other bit
30c0: 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61  s of code that a
30d0: 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70  re needed to sup
30e0: 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e  port the argumen
30f0: 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73  ts.** within tes
3100: 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65  tcase() and asse
3110: 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  rt() macros..*/.
3120: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
3130: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
3140: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3150: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54  TEST).# define T
3160: 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  ESTONLY(X)  X.#e
3170: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53  lse.# define TES
3180: 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  TONLY(X).#endif.
3190: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73  ./*.** Sometimes
31a0: 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c   we need a small
31b0: 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20   amount of code 
31c0: 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62  such as a variab
31d0: 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
31e0: 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f  n.** to setup fo
31f0: 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74  r a later assert
3200: 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57  () statement.  W
3210: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68  e do not want th
3220: 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70  is code to.** ap
3230: 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74  pear when assert
3240: 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20  () is disabled. 
3250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
3260: 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72  acro is therefor
3270: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e  e.** used to con
3280: 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20  tain that setup 
3290: 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22  code.  The "VVA"
32a0: 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20   acronym stands 
32b0: 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61  for.** "Verifica
32c0: 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
32d0: 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  , and Accreditat
32e0: 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20  ion".  In other 
32f0: 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f  words, the.** co
3300: 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e  de within VVA_ON
3310: 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72  LY() will only r
3320: 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69  un during verifi
3330: 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73  cation processes
3340: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45  ..*/.#ifndef NDE
3350: 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41  BUG.# define VVA
3360: 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  _ONLY(X)  X.#els
3370: 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  e.# define VVA_O
3380: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3390: 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20  *.** The ALWAYS 
33a0: 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73  and NEVER macros
33b0: 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61   surround boolea
33c0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68  n expressions wh
33d0: 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65  ich .** are inte
33e0: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
33f0: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3400: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3410: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3420: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
3430: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
3440: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
3450: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3460: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3470: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3480: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3490: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
34a0: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
34b0: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
34c0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
34d0: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
34e0: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
34f0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3500: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3510: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3520: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
3530: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
3540: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
3550: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3560: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3570: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3580: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3590: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
35a0: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
35b0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
35c0: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
35d0: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
35e0: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
35f0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3600: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3610: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3620: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
3630: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
3640: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3650: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3660: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3670: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3680: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3690: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
36a0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
36b0: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
36c0: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
36d0: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
36e0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
36f0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
3700: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
3710: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3720: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
3730: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3740: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
3750: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
3760: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
3770: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
3780: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
3790: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
37a0: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
37b0: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
37c0: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
37d0: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
37e0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
37f0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
3800: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
3810: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
3820: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
3830: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
3840: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
3850: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
3860: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
3870: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3880: 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
3890: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
38a0: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
38b0: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
38c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
38d0: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
38e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
38f0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
3900: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
3910: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
3920: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
3930: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
3940: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
3950: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
3960: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
3970: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
3980: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
3990: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
39a0: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
39b0: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
39c0: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
39d0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
39e0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
39f0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
3a00: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
3a10: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3a20: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3a30: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
3a40: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
3a50: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3a60: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
3a70: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e  * Return true (n
3a80: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
3a90: 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65  input is an inte
3aa0: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
3ab0: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
3ac0: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
3ad0: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
3ae0: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
3af0: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
3b00: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
3b10: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
3b20: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
3b30: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
3b40: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
3b50: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
3b60: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
3b70: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
3b80: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
3b90: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
3ba0: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
3bb0: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
3bc0: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
3bd0: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
3be0: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
3bf0: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
3c00: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
3c10: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
3c20: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
3c30: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
3c40: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
3c50: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
3c60: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
3c70: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
3c80: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
3c90: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
3ca0: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
3cb0: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
3cc0: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
3cd0: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
3ce0: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
3cf0: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
3d00: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
3d10: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
3d20: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
3d30: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
3d40: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
3d50: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
3d60: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
3d70: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
3d80: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
3d90: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
3da0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
3db0: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
3dc0: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
3dd0: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
3de0: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
3df0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3e00: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
3e10: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
3e20: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
3e30: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
3e40: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3e50: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
3e60: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
3e70: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3e80: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
3e90: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
3ea0: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
3eb0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
3ec0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
3ed0: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
3ee0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
3ef0: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
3f00: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
3f10: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
3f20: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
3f30: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
3f40: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3f50: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
3f60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3f70: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
3f80: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
3f90: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
3fa0: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
3fb0: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
3fc0: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
3fd0: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
3fe0: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
3ff0: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
4000: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
4010: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4020: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4030: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4040: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4050: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4060: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4070: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4080: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4090: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
40a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
40b0: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
40c0: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
40d0: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
40e0: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
40f0: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4100: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4110: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4120: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4130: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4140: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4150: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4160: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4170: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4180: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4190: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
41a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
41b0: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
41c0: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
41d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
41e0: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
41f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4200: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4210: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4220: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4230: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4240: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4250: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4260: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4270: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4280: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4290: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
42a0: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
42b0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
42c0: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
42d0: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
42e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
42f0: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4300: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4310: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4320: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4330: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4340: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4350: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4360: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4370: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
4380: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
4390: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
43a0: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
43b0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
43c0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
43d0: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
43e0: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
43f0: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
4400: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
4410: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
4420: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
4430: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
4440: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
4450: 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f  ), set it .** to
4460: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
4470: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
4480: 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52  =3 || SQLITE_THR
4490: 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64  EADSAFE==0.# und
44a0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ef SQLITE_MAX_WO
44b0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
44c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
44d0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
44e0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
44f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
4500: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
4510: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
4520: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a  ORKER_THREADS 8.
4530: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4540: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4550: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
4560: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4570: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
4580: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
4590: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
45a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53  WORKER_THREADS>S
45b0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
45c0: 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66  _THREADS.# undef
45d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
45e0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
45f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
4600: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51  ORKER_THREADS SQ
4610: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4620: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64  KER_THREADS.#end
4630: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
4640: 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c  fault initial al
4650: 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  location for the
4660: 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20   pagecache when 
4670: 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a  using separate.*
4680: 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72  * pagecaches for
4690: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
46a0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f  onnection.  A po
46b0: 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73  sitive number is
46c0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
46d0: 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61  f pages.  A nega
46e0: 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72  tive number N tr
46f0: 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73  anslations means
4700: 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a   that a buffer.*
4710: 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74  * of -1024*N byt
4720: 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  es is allocated 
4730: 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20  and used for as 
4740: 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74  many pages as it
4750: 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23   will hold..*/.#
4760: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4770: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
4780: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
4790: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
47a0: 48 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65  HE_INITSZ 100.#e
47b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  ndif../*.** GCC 
47c0: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
47d0: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
47e0: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
47f0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
4800: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
4810: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
4820: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
4830: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
4840: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4850: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4860: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4870: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4880: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4890: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
48a0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
48b0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
48c0: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
48d0: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
48e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
48f0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
4900: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
4910: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
4920: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
4930: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
4940: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4950: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4960: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4970: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4980: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4990: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
49a0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
49b0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
49c0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
49d0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
49e0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
49f0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
4a00: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
4a10: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
4a20: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
4a30: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
4a40: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4a50: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4a60: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4a70: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4a80: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4a90: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
4aa0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
4ab0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
4ac0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
4ad0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
4ae0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
4af0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
4b00: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
4b10: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
4b20: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
4b30: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
4b40: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4b50: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4b60: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4b70: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4b80: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4b90: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
4ba0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
4bb0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4bc0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4bd0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
4be0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
4bf0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
4c00: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4c10: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
4c20: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
4c30: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4c40: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4c50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4c60: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4c70: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4c80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4c90: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4ca0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4cb0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4cc0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4cd0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4ce0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
4cf0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
4d00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4d10: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
4d20: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4d30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
4d40: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4d50: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4d60: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4d70: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4d80: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4d90: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4da0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4db0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4dc0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4dd0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4de0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
4df0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
4e00: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
4e10: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
4e20: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4e30: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
4e40: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4e50: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4e60: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4e70: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4e80: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4e90: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4ea0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4eb0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4ec0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4ed0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4ee0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4ef0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4f00: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
4f10: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
4f20: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4f30: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
4f40: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4f50: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4f60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4f70: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4f80: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4f90: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4fa0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4fb0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4fc0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4fd0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4fe0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
4ff0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
5000: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
5010: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
5020: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
5030: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
5040: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
5050: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
5060: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
5070: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
5080: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
5090: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
50a0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
50b0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
50c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
50d0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
50e0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
50f0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
5100: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
5110: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
5120: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
5130: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
5140: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
5150: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
5160: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
5170: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
5180: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
5190: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
51a0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
51b0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
51c0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
51d0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
51e0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
51f0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
5200: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
5210: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5220: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
5230: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
5240: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
5250: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5260: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5270: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5280: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5290: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
52a0: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
52b0: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
52c0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
52d0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
52e0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
52f0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
5300: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
5310: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
5320: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
5330: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
5340: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
5350: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5360: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5370: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5380: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5390: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
53a0: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
53b0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
53c0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
53d0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
53e0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
53f0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5400: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5410: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5420: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5430: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5440: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5450: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5460: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5470: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5480: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5490: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
54a0: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
54b0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
54c0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
54d0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
54e0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
54f0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5500: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5510: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5520: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5530: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5540: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5550: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5560: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5570: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5580: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5590: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
55a0: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
55b0: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
55c0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
55d0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
55e0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
55f0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5600: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5610: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5620: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
5630: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
5640: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5650: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5660: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5670: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5680: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5690: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
56a0: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
56b0: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
56c0: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
56d0: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
56e0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
56f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
5700: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
5710: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5720: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
5730: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
5740: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5750: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5760: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5770: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5780: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5790: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
57a0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
57b0: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
57c0: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
57d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
57e0: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
57f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5800: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
5810: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
5820: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
5830: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
5840: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5850: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5860: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5870: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5880: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5890: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
58a0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
58b0: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
58c0: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
58d0: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
58e0: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
58f0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
5900: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
5910: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
5920: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
5930: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
5940: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5950: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5960: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5970: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5980: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28 64 65  time..*/.#if (de
5990: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
59a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
59b0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
59c0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
59d0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
59e0: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
59f0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
5a00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
5a10: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
5a20: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
5a30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
5a40: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
5a50: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
5a60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5a70: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26  ned(__arm__)) &&
5a80: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
5a90: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5aa0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
5ab0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
5ac0: 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53   1234.# define S
5ad0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5ae0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
5af0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5b00: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
5b10: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5b20: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
5b30: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
5b40: 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c  ned(sparc)    ||
5b50: 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f   defined(__ppc__
5b60: 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65  ))  \.    && !de
5b70: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
5b80: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
5b90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5ba0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
5bb0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5bc0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
5bd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5be0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
5bf0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5c00: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5c10: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64  ITE_UTF16BE.#end
5c20: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
5c30: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5c40: 29 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  ).# ifdef SQLITE
5c50: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
5c60: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
5c70: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
5c80: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
5c90: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
5ca0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5cb0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
5cc0: 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20  R    0     /* 0 
5cd0: 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61  means "unknown a
5ce0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20  t compile-time" 
5cf0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
5d00: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
5d10: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
5d20: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
5d30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5d40: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
5d50: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5d60: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
5d70: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5d80: 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44    (SQLITE_BIGEND
5d90: 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36  IAN?SQLITE_UTF16
5da0: 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  BE:SQLITE_UTF16L
5db0: 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  E).#endif../*.**
5dc0: 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   Constants for t
5dd0: 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73  he largest and s
5de0: 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65  mallest possible
5df0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
5e00: 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
5e10: 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73  e macros are des
5e20: 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f  igned to work co
5e30: 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20  rrectly on both 
5e40: 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69  32-bit and 64-bi
5e50: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  t.** compilers..
5e60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45  */.#define LARGE
5e70: 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66  ST_INT64  (0xfff
5e80: 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37  fffff|(((i64)0x7
5e90: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23  fffffff)<<32)).#
5ea0: 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f  define SMALLEST_
5eb0: 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29  INT64 (((i64)-1)
5ec0: 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34   - LARGEST_INT64
5ed0: 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20  )../* .** Round 
5ee0: 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74  up a number to t
5ef0: 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d  he next larger m
5f00: 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54  ultiple of 8.  T
5f10: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74  his is used.** t
5f20: 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61  o force 8-byte a
5f30: 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62  lignment on 64-b
5f40: 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73  it architectures
5f50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  ..*/.#define ROU
5f60: 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29  ND8(x)     (((x)
5f70: 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52  +7)&~7)../*.** R
5f80: 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65  ound down to the
5f90: 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c   nearest multipl
5fa0: 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e  e of 8.*/.#defin
5fb0: 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20  e ROUNDDOWN8(x) 
5fc0: 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  ((x)&~7)../*.** 
5fd0: 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
5fe0: 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69  pointer X is ali
5ff0: 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74  gned to an 8-byt
6000: 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69  e boundary.  Thi
6010: 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  s.** macro is us
6020: 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61  ed only within a
6030: 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66  ssert() to verif
6040: 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  y that the code 
6050: 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67  gets.** all alig
6060: 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f  nment restrictio
6070: 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a  ns correct..**.*
6080: 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c  * Except, if SQL
6090: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
60a0: 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66  ED_MALLOC is def
60b0: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a  ined, then the.*
60c0: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c  * underlying mal
60d0: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
60e0: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
60f0: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
6100: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
6110: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
6120: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
6130: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
6140: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
6150: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6160: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
6170: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
6180: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
6190: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
61a0: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
61b0: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
61c0: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
61d0: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
61e0: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
61f0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
6200: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
6210: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
6220: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
6230: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
6240: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
6250: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
6260: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
6270: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
6280: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
6290: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
62a0: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
62b0: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
62c0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
62d0: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
62e0: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
62f0: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
6300: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
6310: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
6320: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
6330: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
6340: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
6350: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6360: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
6370: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6380: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
6390: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
63a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
63b0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
63c0: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
63d0: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
63e0: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
63f0: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
6400: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
6410: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
6420: 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20  d(__sun) \.  || 
6430: 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53  defined(__FreeBS
6440: 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  D__) \.  || defi
6450: 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f  ned(__DragonFly_
6460: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6470: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6480: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
6490: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
64a0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
64b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
64c0: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
64d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
64e0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  _MAX_MMAP_SIZE_x
64f0: 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66  c 1 /* exclude f
6500: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
6510: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6520: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6530: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
6540: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
6550: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
6560: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
6570: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
6580: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
6590: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
65a0: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
65b0: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
65c0: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
65d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
65e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
65f0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
6600: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6610: 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69  AP_SIZE 0.# defi
6620: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
6630: 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  T_MMAP_SIZE_xc 1
6640: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
6650: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
6660: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
6670: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6680: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
6690: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
66a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
66b0: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
66c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
66d0: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
66e0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
66f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
6700: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
6710: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
6720: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6730: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
6740: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
6750: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
6760: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
6770: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
6780: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
6790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
67a0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
67b0: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
67c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
67d0: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
67e0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
67f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6800: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6810: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6820: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
6830: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6840: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6850: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
6860: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6870: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
6880: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
6890: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
68a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
68b0: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
68c0: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
68d0: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
68e0: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
68f0: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
6900: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
6910: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
6920: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
6930: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
6940: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
6950: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
6960: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
6970: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6980: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
6990: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
69a0: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
69b0: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
69c0: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
69d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
69e0: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
69f0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
6a00: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
6a10: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
6a20: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
6a30: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
6a40: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
6a50: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
6a60: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
6a70: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
6a80: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
6a90: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
6aa0: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
6ab0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
6ac0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
6ad0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
6ae0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
6af0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
6b00: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
6b10: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
6b20: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
6b30: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
6b40: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
6b50: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
6b60: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
6b70: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
6b80: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
6b90: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
6ba0: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
6bb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
6bc0: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
6bd0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
6be0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
6bf0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
6c00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
6c10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
6c20: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
6c30: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
6c40: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
6c50: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6c60: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
6c70: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6c80: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
6c90: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
6ca0: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
6cb0: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
6cc0: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
6cd0: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
6ce0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
6cf0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
6d00: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
6d10: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
6d20: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
6d30: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
6d40: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
6d50: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
6d60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
6d70: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6d80: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
6d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
6da0: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
6db0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
6dc0: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
6dd0: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
6de0: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
6df0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
6e00: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
6e10: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
6e20: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
6e30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
6e40: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
6e50: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
6e60: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
6e70: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
6e80: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
6e90: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
6ea0: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
6eb0: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
6ec0: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
6ed0: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
6ee0: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
6ef0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
6f00: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
6f10: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
6f20: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
6f30: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
6f40: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6f50: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
6f60: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
6f70: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
6f80: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
6f90: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
6fa0: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
6fb0: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
6fc0: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
6fd0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
6fe0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
6ff0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
7000: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
7010: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
7020: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
7030: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
7040: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
7050: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
7060: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
7070: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
7080: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
7090: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
70a0: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
70b0: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
70c0: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
70d0: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
70e0: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
70f0: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
7100: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
7110: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
7120: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
7130: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
7140: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
7150: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
7160: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
7170: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
7180: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
7190: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
71a0: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
71b0: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
71c0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
71d0: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
71e0: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
71f0: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
7200: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
7210: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
7220: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
7230: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
7240: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
7250: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
7260: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
7270: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
7280: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
7290: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
72a0: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
72b0: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
72c0: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
72d0: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
72e0: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
72f0: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
7300: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
7310: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
7320: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
7330: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
7340: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
7350: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
7360: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
7370: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
7380: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
7390: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
73a0: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
73b0: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
73c0: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
73d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
73e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
73f0: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
7400: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
7410: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
7420: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
7430: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
7440: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
7450: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
7460: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
7470: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
7480: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
7490: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
74a0: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
74b0: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
74c0: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
74d0: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
74e0: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
74f0: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
7500: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
7510: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7520: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
7530: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
7540: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
7550: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
7560: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
7570: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
7580: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
7590: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
75a0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
75b0: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
75c0: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
75d0: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
75e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
75f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
7600: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
7610: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
7620: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
7630: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
7640: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
7650: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
7660: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
7670: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
7680: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
7690: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
76a0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
76b0: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
76c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
76d0: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
76e0: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
76f0: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
7700: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
7710: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
7720: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
7730: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
7740: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
7750: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
7760: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
7770: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
7780: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
7790: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
77a0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
77b0: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
77c0: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
77d0: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
77e0: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
77f0: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
7800: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
7810: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
7820: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
7830: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
7840: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
7850: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
7860: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
7870: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
7880: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
7890: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
78a0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
78b0: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
78c0: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
78d0: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
78e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
78f0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
7900: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
7910: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7920: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
7930: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
7940: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
7950: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
7960: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
7970: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
7980: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
7990: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
79a0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
79b0: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
79c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
79d0: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
79e0: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
79f0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
7a00: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
7a10: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
7a20: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
7a30: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
7a40: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
7a50: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
7a60: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
7a70: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
7a80: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
7a90: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
7aa0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
7ab0: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
7ac0: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
7ad0: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
7ae0: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
7af0: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
7b00: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
7b10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
7b20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b30: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
7b40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b50: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
7b60: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
7b70: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
7b80: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
7b90: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
7ba0: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7bb0: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
7bc0: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
7bd0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
7be0: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
7bf0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
7c00: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
7c10: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7c20: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
7c30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7c40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
7c50: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
7c60: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
7c70: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
7c80: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
7c90: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
7ca0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7cb0: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
7cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
7cd0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
7ce0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
7cf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
7d00: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
7d10: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
7d20: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
7d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d40: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
7d50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
7d60: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
7d70: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
7d80: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
7d90: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7db0: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7dd0: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7df0: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
7e00: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7e10: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
7e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e30: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
7e40: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
7e50: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
7e60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7e70: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
7e80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7e90: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7ea0: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7eb0: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7ec0: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7ed0: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7ee0: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7ef0: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
7f00: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
7f10: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
7f20: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
7f30: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
7f40: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
7f50: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
7f60: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
7f70: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
7f80: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
7f90: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7fa0: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7fb0: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7fc0: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7fd0: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7fe0: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7ff0: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
8000: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
8010: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
8020: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
8030: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
8040: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
8050: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
8060: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
8070: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
8080: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
8090: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
80a0: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
80b0: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
80c0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
80d0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
80e0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
80f0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
8100: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
8110: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
8120: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
8130: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
8140: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
8150: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
8160: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
8170: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
8180: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
8190: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
81a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
81b0: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
81c0: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
81d0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
81e0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
81f0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
8200: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
8210: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
8220: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
8230: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
8240: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
8250: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
8260: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
8270: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
8280: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
8290: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
82a0: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
82b0: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
82c0: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
82d0: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
82e0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
82f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8300: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
8310: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
8320: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8330: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8340: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
8350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
8360: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
8370: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
8380: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
8390: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
83a0: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
83b0: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
83c0: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
83d0: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
83e0: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
83f0: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
8400: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
8410: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
8420: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
8430: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
8440: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
8450: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
8460: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
8470: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
8480: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
8490: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
84a0: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
84b0: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
84c0: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
84d0: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
84e0: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
84f0: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
8500: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
8510: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
8520: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
8530: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
8540: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
8550: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
8560: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
8570: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
8580: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
8590: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
85a0: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
85b0: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
85c0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
85d0: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
85e0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
85f0: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
8600: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
8610: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
8620: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
8630: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
8640: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
8650: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
8660: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
8670: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
8680: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
8690: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
86a0: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
86b0: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
86c0: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
86d0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
86e0: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
86f0: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
8700: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
8710: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8720: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
8730: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
8740: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
8750: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
8760: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
8770: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
8780: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
8790: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
87a0: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
87b0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
87c0: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
87d0: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
87e0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
87f0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
8800: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
8810: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
8820: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
8830: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
8840: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
8850: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
8860: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
8870: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
8880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8890: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
88a0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
88b0: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
88c0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
88d0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
88e0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
88f0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
8900: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
8910: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
8920: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
8930: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
8940: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
8950: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
8960: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
8970: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
8980: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
8990: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
89a0: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
89b0: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
89c0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
89d0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
89e0: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
89f0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
8a00: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
8a10: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8a20: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8a30: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
8a40: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
8a50: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
8a60: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
8a70: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
8a80: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
8a90: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
8aa0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8ab0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
8ac0: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
8ad0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
8ae0: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
8af0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
8b00: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
8b10: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
8b20: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
8b30: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
8b40: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
8b50: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
8b60: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
8b70: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
8b80: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
8b90: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
8ba0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
8bb0: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
8bc0: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
8bd0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
8be0: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
8bf0: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
8c00: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
8c10: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
8c20: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
8c30: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
8c40: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
8c50: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
8c60: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
8c70: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
8c80: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
8c90: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8ca0: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
8cb0: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
8cc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
8cd0: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
8ce0: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
8cf0: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
8d00: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
8d10: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
8d20: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
8d30: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
8d40: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
8d50: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
8d60: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
8d70: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
8d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
8d90: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8da0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8db0: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8dc0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8dd0: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8de0: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8df0: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
8e00: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
8e10: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
8e20: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
8e30: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
8e40: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
8e50: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8e60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8e70: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
8e80: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
8e90: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8ea0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8eb0: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8ec0: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8ed0: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8ee0: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8ef0: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
8f00: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8f10: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
8f20: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
8f30: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
8f40: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
8f50: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
8f60: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
8f70: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
8f80: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
8f90: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8fa0: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8fb0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8fc0: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8fd0: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8fe0: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8ff0: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
9000: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
9010: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
9020: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
9030: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
9040: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
9050: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
9060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
9070: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
9080: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
9090: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
90a0: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
90b0: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
90c0: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
90d0: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
90e0: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
90f0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
9100: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
9110: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
9120: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
9130: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
9140: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
9150: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
9160: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
9170: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
9180: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
9190: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
91a0: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
91b0: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
91c0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
91d0: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
91f0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
9200: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
9210: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
9220: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
9230: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
9240: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
9250: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
9260: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
9270: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
9280: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
9290: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
92a0: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
92b0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
92c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
92d0: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
92e0: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
92f0: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
9300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
9310: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
9320: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
9330: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
9340: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
9350: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
9360: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
9370: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
9380: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
9390: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
93a0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
93b0: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
93c0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
93d0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
93e0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
93f0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
9400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
9410: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
9420: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
9430: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
9440: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
9450: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
9460: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
9470: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
9480: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
9490: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
94a0: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
94b0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
94c0: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
94d0: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
94e0: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
94f0: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
9500: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
9510: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
9520: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
9530: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
9540: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
9550: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
9560: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
9570: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
9580: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
9590: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
95a0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
95b0: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
95c0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
95d0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
95e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
95f0: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
9600: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
9610: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
9620: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
9630: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9640: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
9650: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
9660: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
9670: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
9680: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
9690: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
96a0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
96b0: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
96c0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
96d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
96e0: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
96f0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
9700: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
9710: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
9720: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
9730: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
9740: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
9750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9760: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
9770: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
9780: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
9790: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
97a0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
97b0: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
97c0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
97d0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
97e0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
97f0: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
9800: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
9810: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
9820: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
9830: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
9840: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
9850: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
9860: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
9870: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
9880: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
9890: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
98a0: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
98b0: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
98c0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
98d0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
98e0: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
98f0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
9900: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
9910: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
9920: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
9930: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
9940: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
9950: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
9960: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
9970: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
9980: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
9990: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
99a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
99b0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
99c0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
99d0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
99e0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
99f0: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
9a00: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
9a10: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
9a20: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
9a30: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
9a40: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
9a50: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
9a60: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
9a70: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9a80: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9a90: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ab0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9ac0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
9ad0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
9ae0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9af0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9b00: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9b10: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9b20: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9b50: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
9b60: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9b70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
9b80: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
9b90: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9ba0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
9bb0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
9bc0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
9bd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9be0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
9bf0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
9c00: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
9c10: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
9c20: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
9c30: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
9c40: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
9c50: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
9c60: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
9c70: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
9c80: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
9c90: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9ca0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
9cb0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
9cc0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
9cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9ce0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
9cf0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9d10: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
9d20: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
9d30: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
9d40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9d50: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
9d60: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
9d70: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
9d80: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9da0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9db0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9dc0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9dd0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9df0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
9e00: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
9e10: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
9e20: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
9e30: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
9e40: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
9e50: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
9e60: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9e70: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9e80: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
9e90: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9ea0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ec0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9ed0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9ee0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9ef0: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f10: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
9f20: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
9f30: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e  tions */.  u8 en
9f40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9f50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
9f60: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75   encoding */.  u
9f70: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f90: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9fa0: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9fb0: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9fc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9fd0: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
9fe0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
9ff0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
a000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a010: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
a020: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
a030: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
a040: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
a050: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
a060: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
a070: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
a080: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
a090: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
a0a0: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
a0b0: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
a0c0: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
a0d0: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0f0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
a100: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
a110: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
a120: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
a130: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a140: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
a150: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
a160: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
a170: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
a180: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
a190: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
a1a0: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
a1b0: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
a1c0: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
a1d0: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
a1e0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
a1f0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
a200: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
a210: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
a220: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
a230: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
a240: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
a250: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
a260: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
a270: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
a280: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
a290: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
a2a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
a2b0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
a2c0: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
a2d0: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
a2e0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
a2f0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
a300: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
a310: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
a320: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
a330: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
a340: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
a350: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
a360: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
a370: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
a380: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
a390: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
a3a0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
a3b0: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
a3c0: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
a3d0: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
a3e0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
a3f0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a410: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
a420: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
a430: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
a440: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
a450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
a460: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
a470: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
a480: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
a490: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
a4a0: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
a4b0: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
a4c0: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
a4d0: 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62    u8 imposterTab
a4e0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
a4f0: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
a500: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
a510: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
a520: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
a530: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a540: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
a550: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
a560: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
a570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a580: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a590: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a5a0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
a5b0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
a5c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a5d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a5e0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a5f0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
a600: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
a610: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
a620: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a630: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
a640: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
a650: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
a660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a670: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
a680: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
a690: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
a6a0: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
a6b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a6c0: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
a6d0: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
a6e0: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
a6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a700: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
a710: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
a720: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
a730: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
a740: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
a750: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
a760: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
a770: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
a780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a790: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
a7a0: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
a7b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
a7c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
a7d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
a7e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
a7f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a800: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a830: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
a840: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a850: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a870: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
a880: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
a890: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
a8a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
a8b0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
a8c0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a8d0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a8e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
a8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a900: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
a910: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
a920: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
a930: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
a940: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
a950: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a960: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a970: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
a980: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
a990: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
a9a0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
a9b0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
a9c0: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
a9d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
a9e0: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
a9f0: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
aa00: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
aa10: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
aa20: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
aa30: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
aa40: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
aa50: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
aa60: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
aa70: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
aa80: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
aa90: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
aaa0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
aab0: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
aac0: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
aad0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
aae0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
aaf0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
ab00: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
ab10: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
ab20: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
ab30: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
ab40: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
ab50: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
ab60: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
ab70: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
ab80: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
ab90: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
aba0: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
abb0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
abc0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
abd0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
abe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
abf0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
ac00: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74  N.  sqlite3_xaut
ac10: 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20  h xAuth;        
ac20: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
ac30: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
ac40: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
ac50: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
ac60: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
ac70: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
ac80: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
ac90: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
aca0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
acb0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
acc0: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
acd0: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
ace0: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
acf0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
ad00: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
ad10: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
ad20: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
ad30: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
ad40: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
ad50: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
ad60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ad70: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
ad80: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ad90: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
ada0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
adb0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
adc0: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
add0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ade0: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
adf0: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
ae00: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
ae20: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
ae30: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
ae40: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
ae50: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
ae60: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
ae70: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
ae80: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
ae90: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
aea0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
aeb0: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
aec0: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
aed0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
aee0: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
aef0: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
af00: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
af10: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
af20: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
af30: 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20  f.  FuncDefHash 
af40: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
af50: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
af60: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
af70: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
af80: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
af90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
afa0: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
afb0: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
afc0: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
afd0: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
afe0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
aff0: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b010: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
b020: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
b030: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
b040: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
b050: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
b060: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
b070: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
b080: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
b090: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
b0a0: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
b0b0: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
b0c0: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b0e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
b0f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
b100: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
b110: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
b120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b130: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
b140: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
b150: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
b160: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
b170: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
b180: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
b190: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
b1a0: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
b1b0: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
b1c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
b1d0: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
b1e0: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
b1f0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
b200: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
b210: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
b220: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
b230: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
b240: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
b250: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
b260: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
b270: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
b280: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
b290: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
b2a0: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
b2b0: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
b2c0: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
b2d0: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
b2e0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
b2f0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
b300: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
b310: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
b320: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
b330: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
b340: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
b350: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
b360: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
b370: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
b380: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
b390: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
b3a0: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
b3b0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
b3c0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
b3d0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
b3e0: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
b3f0: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
b400: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
b410: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
b420: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
b430: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
b440: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
b450: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
b460: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
b470: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
b480: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
b490: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
b4a0: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
b4b0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4d0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
b4e0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
b4f0: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
b500: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
b510: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
b520: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
b530: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
b540: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
b550: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
b560: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
b570: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
b580: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
b590: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b5a0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c  ENTICATION.  sql
b5b0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75  ite3_userauth au
b5c0: 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73  th;        /* Us
b5d0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b5e0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  n information */
b5f0: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
b600: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
b610: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
b620: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
b630: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
b640: 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62  EMA_ENC(db) ((db
b650: 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  )->aDb[0].pSchem
b660: 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20  a->enc).#define 
b670: 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28  ENC(db)        (
b680: 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  (db)->enc)../*.*
b690: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
b6a0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
b6b0: 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  3.flags..*/.#def
b6c0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
b6d0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
b6e0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
b6f0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
b700: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
b710: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
b720: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
b730: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
b740: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
b750: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
b760: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
b770: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34        0x00000004
b780: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
b790: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
b7a0: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
b7b0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
b7c0: 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20  nc  0x00000008  
b7d0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
b7e0: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
b7f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b800: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
b810: 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a    0x00000010  /*
b820: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
b830: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
b840: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
b850: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
b860: 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75  0020  /* Show fu
b870: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
b880: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
b890: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
b8a0: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
b8b0: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
b8c0: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
b8d0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b8e0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
b8f0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
b900: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
b910: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
b920: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b950: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
b960: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
b970: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b9a0: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
b9b0: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
b9c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9d0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
b9e0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
b9f0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
ba00: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
ba10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
ba40: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
ba50: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
ba60: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
ba70: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
ba80: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
ba90: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
baa0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bab0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
bac0: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
bad0: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
bae0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
baf0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
bb00: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
bb10: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
bb20: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
bb30: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
bb40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bb50: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
bb60: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
bb70: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
bb80: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
bb90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
bba0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
bbb0: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
bbc0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
bbd0: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
bbe0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bbf0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
bc00: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
bc10: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
bc20: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
bc30: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
bc40: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
bc50: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
bc60: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
bc70: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
bc80: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
bc90: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
bca0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
bcb0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
bcc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
bcd0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
bce0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
bcf0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
bd00: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
bd10: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
bd20: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
bd30: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
bd40: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
bd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd60: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
bd70: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
bd80: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
bd90: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
bda0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bdb0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
bdc0: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
bdd0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
bde0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
bdf0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
be00: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
be10: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
be20: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
be30: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
be40: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
be50: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
be60: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
be70: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
be80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
be90: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30  bleTrigger  0x00
bea0: 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  800000  /* True 
beb0: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
bec0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
bed0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20  LITE_DeferFKs   
bee0: 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20      0x01000000  
bef0: 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20  /* Defer all FK 
bf00: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
bf10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
bf20: 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30  eryOnly      0x0
bf30: 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61  2000000  /* Disa
bf40: 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61  ble database cha
bf50: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
bf60: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20  SQLITE_VdbeEQP  
bf70: 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30        0x04000000
bf80: 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41    /* Debug EXPLA
bf90: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f  IN QUERY PLAN */
bfa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bfb0: 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30  Vacuum         0
bfc0: 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75  x08000000  /* Cu
bfd0: 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43  rrently in a VAC
bfe0: 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  UUM */.#define S
bff0: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
c000: 20 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20       0x10000000 
c010: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
c020: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
c030: 61 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  ad */.../*.** Bi
c040: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
c050: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
c060: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
c070: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
c080: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
c090: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
c0a0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
c0b0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
c0c0: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
c0d0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
c0e0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
c0f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c100: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
c110: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
c120: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
c130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
c140: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
c150: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
c160: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
c170: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
c180: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
c190: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
c1a0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
c1b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
c1c0: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
c1d0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
c1e0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
c1f0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
c200: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
c210: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
c220: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
c230: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
c240: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
c250: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
c260: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
c270: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
c280: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
c290: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
c2a0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
c2b0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
c2c0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
c2d0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
c2e0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
c2f0: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
c300: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c310: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
c320: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
c330: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
c340: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
c350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c360: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
c370: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
c380: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
c390: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
c3a0: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
c3b0: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
c3c0: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
c3d0: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
c3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
c3f0: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
c400: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
c410: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
c420: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  a */.#define SQL
c430: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
c440: 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41     0x2000   /* A
c450: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
c460: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
c470: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
c480: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
c490: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
c4a0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
c4b0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
c4c0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
c4d0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
c4e0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
c4f0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
c500: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c510: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
c520: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c530: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
c540: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
c550: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
c560: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
c570: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
c580: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
c590: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
c5a0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
c5b0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
c5c0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
c5d0: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
c5e0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c5f0: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
c600: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
c610: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
c620: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
c630: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
c640: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
c650: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
c660: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
c670: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
c680: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
c690: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
c6a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
c6b0: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
c6c0: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
c6d0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
c6e0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
c6f0: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
c700: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
c710: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
c720: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
c730: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
c740: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
c750: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
c760: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
c770: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
c780: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
c790: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
c7a0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
c7b0: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
c7c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c7d0: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
c7e0: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
c7f0: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
c800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c810: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
c820: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
c830: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
c840: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
c850: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
c860: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
c870: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
c880: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
c890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8a0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
c8b0: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
c8c0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
c8d0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
c8e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8f0: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
c900: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
c910: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
c920: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
c930: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
c940: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
c950: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
c960: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
c970: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
c980: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
c990: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
c9a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
c9b0: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
c9c0: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
c9d0: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
c9e0: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
c9f0: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
ca00: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
ca10: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
ca20: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
ca30: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
ca40: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
ca50: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
ca60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ca70: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
ca80: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
ca90: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
caa0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
cab0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
cac0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
cad0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
cae0: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
caf0: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
cb00: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
cb10: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
cb20: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
cb30: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
cb40: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
cb50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
cb60: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
cb70: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
cb80: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
cb90: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
cba0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
cbb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
cbc0: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
cbd0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
cbe0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
cbf0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc10: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
cc20: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
cc30: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
cc40: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
cc50: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
cc60: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
cc70: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
cc80: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
cc90: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
cca0: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
ccb0: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
ccc0: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
ccd0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
cce0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
ccf0: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
cd00: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
cd10: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
cd20: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
cd30: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
cd40: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
cd50: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
cd60: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
cd70: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
cd80: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
cd90: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
cda0: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
cdb0: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
cdc0: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
cdd0: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
cde0: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
cdf0: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
ce00: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
ce10: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
ce20: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
ce30: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
ce40: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
ce50: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
ce60: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
ce70: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
ce80: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
ce90: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
cea0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
ceb0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
cec0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
ced0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
cee0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
cef0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
cf00: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
cf10: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
cf20: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
cf30: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
cf40: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
cf50: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
cf60: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
cf70: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
cf80: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
cf90: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
cfa0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
cfb0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
cfc0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
cfd0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
cfe0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
cff0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
d000: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
d010: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
d020: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
d030: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
d040: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
d050: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
d060: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
d070: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
d080: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
d090: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
d0a0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
d0b0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
d0c0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
d0d0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
d0e0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
d0f0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
d100: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
d110: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
d120: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
d130: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
d140: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
d150: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
d160: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
d170: 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53  ASK  0x0003 /* S
d180: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
d190: 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54  TE_UTF16BE or UT
d1a0: 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65  F16LE */.#define
d1b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
d1c0: 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20  E     0x0004 /* 
d1d0: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
d1e0: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
d1f0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d200: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
d210: 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61      0x0008 /* Ca
d220: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
d230: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
d240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d250: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
d260: 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65  0x0010 /* Epheme
d270: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
d280: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
d290: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
d2a0: 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a  EDCOLL 0x0020 /*
d2b0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d2c0: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
d2d0: 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69  e called*/.#defi
d2e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d2f0: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
d300: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
d310: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
d320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d330: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
d340: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
d350: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
d360: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d370: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
d380: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
d390: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
d3a0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
d3b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d3c0: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
d3d0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
d3e0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
d3f0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
d400: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
d410: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
d420: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
d430: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d440: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d450: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
d460: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d470: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d480: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d4a0: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
d4b0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
d4c0: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
d4d0: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
d4e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  ne SQLITE_FUNC_S
d4f0: 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f  LOCHNG  0x2000 /
d500: 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e  * "Slow Change".
d510: 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20   Value constant 
d520: 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20  during a.       
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
d550: 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d  single query - m
d560: 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72  ight change over
d570: 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   time */../*.** 
d580: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
d590: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
d5a0: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
d5b0: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
d5c0: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
d5d0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
d5e0: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
d5f0: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
d600: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
d610: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d620: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d630: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
d640: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d650: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d660: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d670: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d680: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
d690: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
d6a0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
d6b0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d6c0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
d6d0: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
d6e0: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
d6f0: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
d700: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
d710: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
d720: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
d730: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
d740: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
d750: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
d760: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
d770: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d780: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
d790: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
d7a0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d7b0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d7c0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
d7d0: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
d7e0: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
d7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d800: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
d810: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
d820: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d830: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
d840: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
d850: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
d860: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d870: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
d880: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
d890: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
d8a0: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
d8b0: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
d8c0: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
d8d0: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
d8e0: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
d8f0: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
d900: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
d910: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
d920: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a   single query..*
d930: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
d940: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d950: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
d960: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
d970: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
d980: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
d990: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
d9a0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
d9b0: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
d9c0: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
d9d0: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
d9e0: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
d9f0: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
da00: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
da10: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
da20: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
da30: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
da40: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
da50: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
da60: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
da70: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
da80: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
da90: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
daa0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
dab0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
dac0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
dad0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
dae0: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
daf0: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
db00: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
db10: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
db20: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
db30: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
db40: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
db50: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
db60: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
db70: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
db80: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
db90: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
dba0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
dbb0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
dbc0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
dbd0: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
dbe0: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
dbf0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
dc00: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
dc10: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
dc20: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
dc30: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dc40: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
dc50: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
dc60: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
dc70: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dc80: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dc90: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dca0: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
dcb0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
dcc0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
dcd0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dce0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
dcf0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
dd00: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
dd10: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dd20: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dd30: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dd40: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
dd50: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
dd60: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
dd70: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dd80: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
dd90: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
dda0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ddb0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
ddc0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
ddd0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
dde0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
ddf0: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
de00: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
de10: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
de20: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
de30: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
de40: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
de50: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
de60: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
de70: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
de80: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
de90: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
dea0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
deb0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
dec0: 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
ded0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
dee0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
def0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
df00: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
df10: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
df20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
df30: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
df40: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
df50: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
df60: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
df70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
df80: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
df90: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
dfa0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dfb0: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
dfc0: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
dfd0: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
dfe0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dff0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
e000: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
e010: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
e020: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
e030: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
e040: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e050: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e060: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
e070: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
e080: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
e090: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
e0a0: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
e0b0: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
e0c0: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
e0d0: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
e0e0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
e0f0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
e100: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
e110: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
e120: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
e130: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
e140: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
e150: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
e160: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
e170: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
e180: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
e190: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
e1a0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
e1b0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
e1c0: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
e1d0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
e1e0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
e1f0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
e200: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
e210: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
e220: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
e230: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
e240: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
e250: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
e260: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
e270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
e280: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
e290: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
e2a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
e2b0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
e2c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e2d0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
e2e0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
e2f0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
e300: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
e310: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e320: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
e330: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
e340: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
e350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e360: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
e370: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
e380: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
e390: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
e3a0: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
e3b0: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
e3c0: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
e3d0: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
e3e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
e3f0: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
e400: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
e410: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
e420: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
e430: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
e440: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
e450: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
e460: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
e470: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
e480: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
e490: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
e4a0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
e4b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e4c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e4d0: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
e4e0: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
e4f0: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
e500: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
e510: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
e520: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
e530: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
e540: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
e550: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
e560: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
e570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e580: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
e590: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e5a0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5c0: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
e5d0: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e5e0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e5f0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e600: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
e610: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
e620: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
e630: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
e640: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
e650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
e660: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
e670: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
e680: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e690: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e6a0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e6b0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e6c0: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e6d0: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e6e0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e6f0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e700: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e710: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e720: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e730: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e740: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e750: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e760: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e770: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e780: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e790: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e7a0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e7b0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e7c0: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e7d0: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e7e0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e7f0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e800: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e810: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e820: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e830: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e840: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e850: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e860: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e870: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e880: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e890: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e8a0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e8b0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
e8c0: 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
e8d0: 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
e8e0: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e8f0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e900: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e910: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e920: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e930: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e940: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e950: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e960: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e970: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e980: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e990: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e9a0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e9b0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e9c0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e9d0: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e9e0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e9f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
ea00: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
ea10: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
ea20: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ea30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ea40: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
ea50: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
ea60: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
ea70: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
ea80: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
ea90: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
eaa0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
eab0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
eac0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
ead0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
eae0: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
eaf0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
eb00: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
eb10: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
eb20: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
eb30: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
eb40: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
eb50: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
eb60: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
eb70: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
eb80: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
eb90: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
eba0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
ebb0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
ebc0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
ebd0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
ebe0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
ebf0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
ec00: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
ec10: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
ec20: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
ec30: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
ec40: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
ec50: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
ec60: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
ec70: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
ec80: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
ec90: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
eca0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
ecb0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
ecc0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
ecd0: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
ece0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ecf0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
ed00: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
ed10: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
ed20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
ed30: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
ed40: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
ed50: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
ed60: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
ed70: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
ed80: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
ed90: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
eda0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
edb0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
edc0: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
edd0: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
ede0: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
edf0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
ee00: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
ee10: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
ee20: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
ee30: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
ee40: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
ee50: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
ee60: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
ee70: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
ee80: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
ee90: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
eea0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
eeb0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
eec0: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
eed0: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
eee0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
eef0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
ef00: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ef10: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
ef20: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
ef30: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
ef40: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ef50: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ef60: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
ef70: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
ef80: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
ef90: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
efa0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
efb0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
efc0: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
efd0: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
efe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eff0: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
f000: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
f010: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
f020: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
f030: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
f040: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
f050: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
f060: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
f070: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
f080: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
f090: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
f0a0: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
f0b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f0c0: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
f0d0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
f0e0: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
f0f0: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
f100: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
f110: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
f120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f130: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
f140: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
f150: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
f160: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
f170: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
f180: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
f190: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
f1a0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
f1b0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
f1c0: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
f1d0: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
f1e0: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
f1f0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
f200: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
f210: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
f220: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
f230: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
f240: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
f250: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
f260: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
f270: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
f280: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
f290: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
f2a0: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
f2b0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f2c0: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
f2d0: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
f2e0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
f2f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
f300: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
f310: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
f320: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
f330: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
f340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
f350: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
f360: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
f370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f380: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
f390: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
f3a0: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
f3b0: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
f3c0: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
f3d0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
f3e0: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
f3f0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
f400: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
f410: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
f420: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
f430: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
f440: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
f450: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
f460: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
f470: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
f480: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
f490: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
f4a0: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
f4b0: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
f4c0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
f4d0: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
f4e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
f4f0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
f500: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
f510: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
f520: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
f530: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
f540: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f550: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f560: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f570: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f580: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f590: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f5a0: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f5b0: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f5c0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f5d0: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f5e0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f5f0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f600: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f610: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f620: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f630: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f640: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f650: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f660: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f670: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f680: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f690: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f6a0: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f6b0: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f6c0: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f6d0: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f6e0: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f6f0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f700: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f710: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f720: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f730: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f740: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f750: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f760: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f770: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f780: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f790: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f7a0: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f7b0: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f7c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f7d0: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f7e0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f7f0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f800: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f810: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f820: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f830: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f840: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f850: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f860: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f870: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f880: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f890: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f8a0: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f8b0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f8c0: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f8d0: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f8e0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f8f0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f900: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f910: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f920: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f930: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f940: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f950: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f960: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f970: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f980: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f990: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f9a0: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f9b0: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f9c0: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f9d0: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f9e0: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f9f0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
fa00: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
fa10: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
fa20: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
fa30: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
fa40: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
fa50: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
fa60: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
fa70: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
fa80: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
fa90: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
faa0: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
fab0: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
fac0: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
fad0: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
fae0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
faf0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
fb00: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
fb10: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
fb20: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
fb30: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
fb40: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
fb50: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
fb60: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
fb70: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
fb80: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
fb90: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
fba0: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
fbb0: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
fbc0: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
fbd0: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
fbe0: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
fbf0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
fc00: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
fc10: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
fc20: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
fc30: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
fc40: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
fc50: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
fc60: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
fc70: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
fc80: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
fc90: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
fca0: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
fcb0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
fcc0: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
fcd0: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
fce0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
fcf0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
fd00: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
fd10: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
fd20: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
fd30: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
fd40: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
fd50: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
fd60: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
fd70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
fd80: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
fd90: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
fda0: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
fdb0: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
fdc0: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
fdd0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
fde0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
fdf0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
fe00: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
fe10: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
fe20: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
fe30: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fe50: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
fe60: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
fe70: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
fe80: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
fe90: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
fea0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
feb0: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
fec0: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
fed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
fee0: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
fef0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
ff00: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
ff10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
ff20: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
ff30: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
ff40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
ff50: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
ff60: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
ff70: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
ff80: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
ff90: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ffa0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
ffb0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
ffc0: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
ffd0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
ffe0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
fff0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
10000 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
10010 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
10020 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10030 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
10040 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
10050 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
10060 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
10070 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
10080 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
10090 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
100a0 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
100b0 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
100c0 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
100d0 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
100e0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
100f0 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
10100 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
10110 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
10120 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
10130 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
10140 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
10150 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
10160 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
10170 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
10180 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
101b0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
101c0 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
101d0 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
101e0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
101f0 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
10200 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
10210 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ble */.  i16 iPK
10220 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
10230 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
10240 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
10250 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a  ] as the rowid *
10260 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
10270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10280 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10290 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
102a0 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
102b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
102c0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
102d0 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c  his Table */.  L
102e0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
102f0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
10300 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
10310 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
10320 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
10330 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
10340 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
10350 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
10360 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
10370 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
10380 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
10390 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
103a0 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
103b0 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
103c0 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
103d0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
103e0 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
103f0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
10400 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
10410 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
10420 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
10430 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
10440 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
10450 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
10460 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
10470 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
10480 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
10490 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
104a0 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
104b0 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
104c0 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
104d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
104e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
104f0 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
10500 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10510 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
10520 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
10530 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
10540 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
10550 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
10560 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
10570 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
10580 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
10590 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
105a0 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
105b0 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
105c0 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
105d0 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
105e0 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
105f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
10600 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
10610 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
10620 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
10630 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
10640 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
10650 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
10660 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
10670 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
10680 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
10690 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
106a0 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
106b0 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
106c0 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
106d0 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
106e0 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
106f0 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
10700 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
10710 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
10720 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
10730 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
10740 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
10750 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
10760 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10770 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
10780 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
10790 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
107a0 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
107b0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
107c0 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
107d0 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
107e0 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
107f0 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
10800 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
10810 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
10820 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
10830 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
10840 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
10850 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
10860 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
10870 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
10880 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
10890 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
108a0 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
108b0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
108c0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
108d0 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
108e0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
108f0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
10900 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
10910 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
10920 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
10930 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
10940 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10950 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
10960 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
10970 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41  No rowid.  PRIMA
10980 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
10990 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
109a0 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20  NoVisibleRowid  
109b0 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0x40    /* No us
109c0 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
109d0 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
109e0 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
109f0 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20  n       0x80    
10a00 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
10a10 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
10a20 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  /.../*.** Test t
10a30 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
10a40 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
10a50 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
10a60 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
10a70 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
10a80 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
10a90 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
10aa0 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
10ab0 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
10ac0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
10ad0 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
10ae0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10af0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
10b00 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
10b10 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  )      (((X)->ta
10b20 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74  bFlags & TF_Virt
10b30 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  ual)!=0).#else.#
10b40 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10b50 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e  al(X)      0.#en
10b60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
10b70 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  s to determine i
10b80 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69  f a column is hi
10b90 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72  dden.  IsOrdinar
10ba0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a  yHiddenColumn().
10bb0 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ** only works fo
10bc0 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61  r non-virtual ta
10bd0 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74  bles (ordinary t
10be0 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29  ables and views)
10bf0 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79   and is.** alway
10c00 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53  s false unless S
10c10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
10c20 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64  DEN_COLUMNS is d
10c30 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20  efined.  The.** 
10c40 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  IsHiddenColumn()
10c50 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61   macro is genera
10c60 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69  l purpose..*/.#i
10c70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
10c80 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
10c90 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e  OLUMNS).#  defin
10ca0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
10cb0 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
10cc0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
10cd0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
10ce0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
10cf0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
10d00 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
10d10 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
10d20 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69  HIDDEN)!=0).#eli
10d30 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
10d40 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
10d50 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49  BLE).#  define I
10d60 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10d70 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
10d80 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
10d90 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
10da0 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
10db0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
10dc0 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65  X) 0.#else.#  de
10dd0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
10de0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30  umn(X)         0
10df0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
10e00 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
10e10 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
10e20 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
10e30 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
10e40 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
10e50 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
10e60 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
10e70 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
10e80 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65  .#define Visible
10e90 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e  Rowid(X) (((X)->
10ea0 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f  tabFlags & TF_No
10eb0 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30  VisibleRowid)==0
10ec0 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
10ed0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
10ee0 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
10ef0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10f00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
10f10 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
10f20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
10f30 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
10f40 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
10f50 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
10f60 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
10f70 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
10f80 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
10f90 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
10fa0 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
10fb0 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
10fc0 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
10fd0 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
10fe0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
10ff0 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
11000 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
11010 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
11020 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
11030 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
11040 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
11050 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
11060 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
11070 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
11080 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
11090 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
110a0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
110b0 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
110c0 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
110d0 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
110e0 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
110f0 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
11100 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
11110 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
11120 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
11130 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
11140 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
11150 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
11160 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11170 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
11180 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
11190 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
111a0 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
111b0 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
111c0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
111d0 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
111e0 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
111f0 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
11200 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
11210 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
11220 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
11230 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
11240 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
11250 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
11260 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
11270 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
11280 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
11290 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
112a0 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
112b0 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
112c0 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
112d0 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
112e0 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
112f0 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
11300 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
11310 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
11320 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
11330 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
11340 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
11350 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
11360 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
11370 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
11380 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
11390 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
113a0 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
113b0 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
113c0 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
113d0 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
113e0 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
113f0 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
11400 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
11410 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
11420 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
11430 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
11440 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
11450 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
11460 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11470 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
11480 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
11490 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
114a0 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
114b0 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
114c0 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
114d0 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
114e0 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
114f0 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
11500 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
11510 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
11520 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
11530 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
11540 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
11550 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
11560 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
11570 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
11580 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
11590 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
115a0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
115b0 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
115c0 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
115d0 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
115e0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
115f0 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
11600 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
11610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
11620 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
11630 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
11640 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
11650 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
11660 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
11670 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
11680 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
11690 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
116a0 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
116b0 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
116c0 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
116d0 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
116e0 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
116f0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
11700 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
11710 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
11720 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
11730 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
11740 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
11750 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
11760 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
11770 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
11780 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
11790 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
117a0 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
117b0 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
117c0 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
117d0 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
117e0 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
117f0 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
11800 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
11810 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
11820 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
11830 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
11840 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
11850 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
11860 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
11870 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
11880 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
11890 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
118a0 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
118b0 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
118c0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
118d0 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
118e0 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
118f0 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
11900 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
11910 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
11920 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
11930 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
11940 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
11950 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
11960 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
11970 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
11980 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
11990 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
119a0 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
119b0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
119c0 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
119d0 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
119e0 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
119f0 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
11a00 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
11a10 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
11a20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
11a30 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
11a40 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
11a50 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
11a60 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
11a70 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
11a80 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
11a90 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
11aa0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
11ab0 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
11ac0 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
11ad0 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
11ae0 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
11af0 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
11b00 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
11b10 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
11b20 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
11b30 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
11b40 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
11b50 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
11b60 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
11b70 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
11b80 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
11b90 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
11ba0 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
11bb0 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
11bc0 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
11bd0 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
11be0 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
11bf0 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
11c00 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
11c10 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
11c20 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
11c30 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
11c40 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
11c50 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
11c60 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
11c70 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
11c80 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
11c90 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
11ca0 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
11cb0 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
11cc0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
11cd0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
11ce0 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
11cf0 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
11d00 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
11d10 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
11d20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
11d30 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
11d40 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
11d50 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
11d60 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
11d70 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
11d80 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
11d90 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
11da0 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
11db0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
11dc0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
11dd0 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
11de0 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
11df0 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
11e00 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
11e10 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
11e20 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
11e30 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
11e40 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
11e50 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
11e60 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
11e70 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
11e80 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
11e90 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
11ea0 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
11eb0 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
11ec0 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
11ed0 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
11ee0 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
11ef0 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
11f00 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
11f10 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
11f20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
11f30 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
11f40 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
11f50 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
11f60 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
11f70 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
11f80 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
11f90 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
11fa0 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
11fb0 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
11fc0 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
11fd0 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
11fe0 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
11ff0 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
12000 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
12010 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
12020 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
12030 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
12040 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
12050 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
12060 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
12070 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
12080 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12090 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
120a0 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
120b0 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
120c0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
120d0 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
120e0 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
120f0 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
12100 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
12110 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
12120 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
12130 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
12140 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64  */.  u16 nXField
12150 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
12160 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65  er of columns be
12170 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c  yond the key col
12180 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  umns */.  sqlite
12190 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
121a0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
121b0 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
121c0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
121d0 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
121e0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
121f0 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
12200 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
12210 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
12220 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
12230 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
12240 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
12250 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
12260 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
12270 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
12280 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
12290 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
122a0 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
122b0 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
122c0 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
122d0 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
122e0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
122f0 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
12300 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
12310 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
12320 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
12330 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
12340 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
12350 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
12360 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
12370 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
12380 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
12390 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
123a0 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
123b0 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
123c0 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
123d0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
123e0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
123f0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
12400 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
12410 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
12420 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
12430 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
12440 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
12450 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
12460 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
12470 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
12480 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
12490 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
124a0 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
124b0 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
124c0 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
124d0 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
124e0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
124f0 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
12500 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
12510 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
12520 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
12530 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
12540 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
12550 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
12560 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
12570 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
12580 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
12590 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
125a0 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
125b0 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
125c0 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
125d0 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
125e0 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
125f0 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
12600 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
12610 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
12620 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
12630 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
12640 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
12650 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
12660 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
12670 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
12680 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
12690 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
126a0 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
126b0 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
126c0 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
126d0 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
126e0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
126f0 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
12700 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
12710 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
12720 74 20 74 6f 20 2d 31 20 74 6f 20 0a 2a 2a 20 63  t to -1 to .** c
12730 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
12740 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
12750 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
12760 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
12770 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
12780 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
12790 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
127a0 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
127b0 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
127c0 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
127d0 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
127e0 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
127f0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
12800 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
12810 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
12820 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
12830 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
12840 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
12850 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
12860 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
12870 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
12880 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
12890 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
128a0 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
128b0 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
128c0 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
128d0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
128e0 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
128f0 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
12900 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
12910 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
12920 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12930 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
12940 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
12950 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
12960 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
12970 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
12980 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
12990 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
129a0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
129b0 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
129c0 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
129d0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
129e0 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
129f0 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
12a00 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
12a10 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
12a20 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
12a30 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
12a40 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
12a50 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
12a60 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
12a70 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
12a80 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
12a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12aa0 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
12ab0 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
12ac0 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
12ad0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
12ae0 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
12af0 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
12b00 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
12b10 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
12b20 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
12b30 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
12b40 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
12b50 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
12b60 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
12b70 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
12b80 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
12b90 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
12ba0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
12bb0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
12bc0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
12bd0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
12be0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
12bf0 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
12c00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
12c10 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
12c20 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12c30 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
12c40 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
12c50 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
12c60 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
12c70 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
12c80 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
12c90 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
12ca0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
12cb0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
12cc0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
12cd0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
12ce0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
12cf0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
12d00 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
12d10 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
12d20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
12d30 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
12d40 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
12d50 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
12d60 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
12d70 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
12d80 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
12d90 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
12da0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
12db0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
12dc0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
12dd0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
12de0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
12df0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
12e00 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
12e10 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
12e20 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
12e30 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
12e40 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
12e50 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
12e60 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
12e70 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
12e80 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
12e90 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
12ea0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
12eb0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
12ec0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
12ed0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
12ee0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
12ef0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
12f00 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
12f10 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
12f20 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
12f30 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
12f40 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
12f50 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
12f60 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
12f70 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
12f80 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
12f90 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
12fa0 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
12fb0 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
12fc0 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
12fd0 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
12fe0 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
12ff0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
13000 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
13010 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
13020 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
13030 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
13040 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
13050 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
13060 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
13070 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
13080 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
13090 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
130a0 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
130b0 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
130c0 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
130d0 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
130e0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
130f0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
13100 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
13110 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
13120 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
13130 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
13140 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
13150 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
13160 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
13170 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
13180 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
13190 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
131a0 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
131b0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
131c0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
131d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
131e0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
131f0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
13200 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
13210 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
13220 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
13230 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
13240 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
13250 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
13260 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
13270 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
13280 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
13290 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
132a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
132b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
132c0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
132d0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
132e0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
132f0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
13300 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
13310 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
13320 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
13330 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
13340 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
13350 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
13360 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
13370 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
13380 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
13390 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
133a0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
133b0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
133c0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
133d0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
133e0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
133f0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
13400 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
13410 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
13420 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
13430 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
13440 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
13450 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
13460 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
13470 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
13480 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
13490 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
134a0 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
134b0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
134c0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
134e0 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
134f0 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
13500 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
13510 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
13520 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
13530 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
13540 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
13550 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
13560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13570 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
13580 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
13590 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
135b0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
135c0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
135d0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
135e0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
135f0 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
13600 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
13610 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
13620 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
13630 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
13640 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
13650 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
13660 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
13670 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
13680 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
13690 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
136a0 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
136b0 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
136c0 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
136d0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
136e0 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
136f0 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
13700 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
13710 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
13720 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
13730 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
13740 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
13750 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
13760 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
13770 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
13780 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
13790 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
137a0 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
137b0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
137c0 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
137d0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66  n if true */.#if
137e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
137f0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
13800 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
13810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13820 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
13830 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
13840 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
13850 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
13860 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
13870 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
13880 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
13890 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
138a0 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
138b0 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
138c0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
138d0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
138e0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
138f0 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
13900 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
13910 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
13920 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
13930 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
13940 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
13950 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
13960 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
13970 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
13980 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
13990 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
139a0 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
139b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
139c0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
139d0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
139e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
139f0 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
13a00 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
13a10 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
13a20 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
13a30 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
13a40 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
13a50 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
13a60 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
13a70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
13a80 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
13a90 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
13aa0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
13ab0 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
13ac0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
13ad0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
13ae0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
13af0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
13b00 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
13b10 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
13b20 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
13b30 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
13b40 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
13b50 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
13b60 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
13b70 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
13b80 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
13b90 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
13ba0 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65  ne)../* The Inde
13bb0 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c  x.aiColumn[] val
13bc0 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ues are normally
13bd0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
13be0 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65  r.  But.** there
13bf0 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69   are some negati
13c00 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68  ve values that h
13c10 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
13c20 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing:.*/.#define 
13c30 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31  XN_ROWID     (-1
13c40 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
13c50 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72   column is the r
13c60 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
13c70 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32  XN_EXPR      (-2
13c80 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
13c90 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
13ca0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  pression */../*.
13cb0 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
13cc0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
13cd0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
13ce0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
13cf0 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69  n memory .** usi
13d00 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
13d10 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
13d20 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
13d30 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
13d40 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
13d50 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
13d60 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
13d70 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
13d80 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
13d90 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
13da0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
13db0 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
13dc0 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
13dd0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
13de0 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
13df0 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
13e00 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
13e10 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
13e20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
13e30 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
13e40 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13e50 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
13e60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
13e70 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
13e80 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
13e90 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
13ea0 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
13eb0 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
13ec0 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
13ed0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
13ee0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
13ef0 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
13f00 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
13f10 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
13f20 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
13f30 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
13f40 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
13f50 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
13f60 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
13f70 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
13f80 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
13f90 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
13fa0 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
13fb0 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
13fc0 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
13fd0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
13fe0 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
13ff0 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
14000 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
14010 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
14020 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
14030 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
14040 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
14050 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
14060 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
14070 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
14080 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
14090 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
140a0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
140b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
140c0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
140d0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
140e0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
140f0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
14100 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
14110 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
14120 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
14130 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
14140 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
14150 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
14160 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
14170 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
14180 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
14190 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
141a0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
141b0 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
141c0 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
141d0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
141e0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
141f0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
14200 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
14210 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
14220 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
14230 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
14240 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
14250 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
14260 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
14270 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
14280 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
14290 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
142a0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
142b0 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
142c0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
142d0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
142e0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
142f0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
14300 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
14310 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
14320 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
14330 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
14340 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
14350 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
14380 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
14390 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
143a0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
143b0 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
143c0 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
143d0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
143e0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
143f0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
14420 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14430 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
14440 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
14450 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
14460 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
14470 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
14480 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
14490 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
144a0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
144b0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
144c0 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
144d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
144e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
144f0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
14500 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
14510 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
14520 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
14530 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
14540 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
14550 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
14560 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
14570 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
14580 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
14590 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
145a0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
145b0 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
145c0 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
145d0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
145e0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
145f0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
14600 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
14610 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
14620 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
14630 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
14640 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
14650 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
14660 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
14670 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14680 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
14690 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
146a0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
146b0 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
146c0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
146d0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
146e0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
146f0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
14700 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
14710 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
14720 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
14730 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
14740 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
14750 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
14760 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
14770 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14780 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
14790 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
147a0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
147b0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
147c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
147d0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
147e0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
14810 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
14820 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
14830 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
14860 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
14870 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
14880 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
14890 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
148a0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
148b0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
148c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
148d0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
148e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
148f0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
14900 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
14910 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
14920 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
14930 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
14940 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
14950 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
14960 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
14970 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
14980 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
14990 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
149a0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
149b0 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
149c0 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
149d0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
149e0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
149f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14a00 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14a10 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
14a20 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
14a30 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
14a40 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
14a50 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
14a60 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
14a70 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
14a80 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
14a90 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
14aa0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
14ab0 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
14ac0 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
14ad0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
14ae0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
14af0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
14b00 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
14b10 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
14b20 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
14b30 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
14b40 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
14b50 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
14b60 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
14b70 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
14b80 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
14b90 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
14ba0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
14bb0 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
14bc0 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
14bd0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
14be0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
14bf0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
14c00 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
14c10 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
14c20 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
14c30 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
14c40 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
14c50 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
14c60 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
14c70 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
14c80 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
14c90 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
14ca0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
14cb0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
14cc0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
14cd0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
14ce0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
14cf0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
14d00 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
14d10 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
14d20 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
14d30 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
14d40 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
14d50 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
14d60 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
14d70 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
14d80 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
14d90 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
14da0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
14db0 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
14dc0 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
14dd0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
14de0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
14df0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
14e00 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
14e10 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
14e20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
14e30 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
14e40 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
14e50 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
14e60 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20  TK_BLOB, .** or 
14e70 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
14e80 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
14e90 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
14ea0 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
14eb0 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
14ec0 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
14ed0 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
14ee0 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
14ef0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14f00 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61   .** variable na
14f10 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
14f20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14f30 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
14f40 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
14f50 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
14f60 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14f70 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
14f80 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
14f90 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
14fa0 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
14fb0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
14fc0 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
14fd0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
14fe0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
14ff0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
15000 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
15010 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
15020 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
15030 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
15040 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
15050 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
15060 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
15070 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
15080 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
15090 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
150a0 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
150b0 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
150c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
150d0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
150e0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
150f0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
15100 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
15110 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
15120 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
15130 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
15140 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
15150 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
15160 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
15170 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
15180 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61  .pList is .** va
15190 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
151a0 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
151b0 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
151c0 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
151d0 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
151e0 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
151f0 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
15200 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
15210 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
15220 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
15230 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
15240 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
15250 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
15260 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
15270 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
15280 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
15290 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
152a0 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
152b0 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
152c0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
152d0 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
152e0 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
152f0 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
15300 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
15310 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
15320 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
15330 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
15340 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
15350 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
15360 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
15370 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
15380 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
15390 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
153a0 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
153b0 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
153c0 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  rk .** character
153d0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
153e0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
153f0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
15400 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a  olds the index .
15410 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
15420 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
15430 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
15440 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
15450 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
15460 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
15470 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
15480 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
15490 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
154a0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
154b0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
154c0 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
154d0 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
154e0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
154f0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
15500 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
15510 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
15520 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
15530 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
15540 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
15550 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
15560 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
15570 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
15580 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
15590 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
155a0 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
155b0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
155c0 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
155d0 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
155e0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
155f0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
15600 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
15610 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
15620 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
15630 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
15640 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
15650 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
15660 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
15670 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
15680 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
15690 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
156a0 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
156b0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
156c0 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
156d0 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
156e0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
156f0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
15700 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
15710 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
15720 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
15730 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
15740 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
15750 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
15760 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
15770 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
15780 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
15790 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
157a0 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
157b0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
157c0 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
157d0 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
157e0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
157f0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
15800 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
15810 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
15820 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
15830 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
15840 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
15850 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
15860 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
15870 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
15880 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
15890 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
158a0 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
158b0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
158c0 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
158d0 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
158e0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
158f0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
15900 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
15910 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
15920 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
15930 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
15940 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
15950 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
15960 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
15970 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
15980 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
15990 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
159a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
159b0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
159c0 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
159d0 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
159e0 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
159f0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
15a00 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
15a10 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
15a20 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
15a30 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
15a40 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
15a50 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
15a60 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
15a70 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
15a80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
15a90 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
15aa0 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
15ab0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
15ac0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
15ad0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15ae0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
15af0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
15b00 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
15b10 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
15b20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
15b30 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
15b40 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
15b50 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
15b60 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
15b70 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
15b80 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a  function. .  ***
15b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bd0 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
15be0 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
15bf0 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
15c00 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
15c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
15c20 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
15c30 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
15c40 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
15c50 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
15c60 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
15c70 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
15c80 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
15c90 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
15ca0 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
15cb0 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
15cc0 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
15cd0 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
15ce0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
15cf0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
15d00 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
15d10 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
15d20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
15d30 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
15d40 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
15d50 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
15d60 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
15d70 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
15d80 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
15d90 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
15da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15de0 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
15df0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
15e00 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
15e10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
15e20 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
15e30 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
15e40 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
15e50 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
15e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
15e70 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
15e80 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
15e90 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
15ec0 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
15ed0 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15ef0 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
15f00 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
15f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
15f30 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
15f40 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
15f50 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
15f60 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
15f70 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
15f80 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
15f90 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
15fc0 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
15fd0 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
15fe0 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
15ff0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
16000 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
16010 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
16020 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
16030 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
16040 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
16050 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
16060 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
16070 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
16080 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
16090 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
160a0 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
160b0 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
160c0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
160d0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
160e0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
160f0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
16100 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
16130 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
16140 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
16150 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
16160 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
16170 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
16180 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
16190 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
161a0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
161b0 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
161c0 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
161d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
161e0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
161f0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
16200 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
16210 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
16220 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
16230 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
16240 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
16250 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
16260 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16270 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
16280 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
16290 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
162a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
162b0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
162c0 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
162d0 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
162e0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
162f0 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
16300 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
16310 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
16320 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
16330 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
16340 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
16350 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
16360 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
16370 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
16380 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
16390 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
163a0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
163b0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
163c0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
163d0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
163e0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
163f0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
16400 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
16410 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
16420 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
16430 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
16440 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
16450 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
16460 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
16470 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
16480 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
16490 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
164a0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
164b0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
164c0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
164d0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
164e0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
164f0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
16500 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
16510 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
16520 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
16530 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
16540 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
16550 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
16560 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
16570 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
16580 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
16590 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
165a0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
165b0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
165c0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
165d0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
165e0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
165f0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
16600 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
16610 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
16620 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
16630 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
16640 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
16650 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
16660 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
16670 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
16680 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
16690 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
166a0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
166b0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
166c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
166d0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
166e0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
166f0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
16700 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
16710 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
16720 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
16730 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
16740 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
16750 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
16760 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
16770 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
16780 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
16790 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
167a0 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
167b0 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
167c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
167d0 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
167e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
167f0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
16800 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
16810 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
16820 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
16830 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
16840 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
16850 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
16860 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
16870 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
16880 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
16890 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
168a0 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
168b0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
168c0 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69  ./*.** Combinati
168d0 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f  ons of two or mo
168e0 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f  re EP_* flags.*/
168f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
16900 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
16910 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f  e|EP_Subquery) /
16920 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65 73  * Propagate thes
16930 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20 2a  e bits up tree *
16940 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
16950 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
16960 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
16970 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
16980 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
16990 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
169a0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
169b0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
169c0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
169d0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
169e0 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
169f0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
16a00 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
16a10 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
16a20 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
16a30 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
16a40 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
16a50 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
16a60 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
16a70 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
16a80 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
16a90 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
16aa0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
16ab0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
16ac0 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
16ad0 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
16ae0 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
16af0 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
16b00 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
16b10 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
16b20 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
16b30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
16b40 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
16b50 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
16b60 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
16b70 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
16b80 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
16b90 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
16ba0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
16bb0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
16bc0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
16bd0 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
16be0 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
16bf0 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
16c00 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
16c10 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
16c20 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
16c30 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
16c40 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
16c50 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
16c60 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
16c70 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
16c80 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
16c90 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
16ca0 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
16cb0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
16cc0 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
16cd0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
16ce0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
16cf0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
16d00 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
16d10 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
16d20 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
16d30 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
16d40 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
16d50 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
16d60 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
16d70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
16d80 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
16d90 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
16da0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
16db0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
16dc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
16dd0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
16de0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
16df0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
16e00 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
16e10 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
16e20 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
16e30 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
16e40 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
16e50 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
16e60 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
16e70 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
16e80 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
16e90 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
16ea0 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
16eb0 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
16ec0 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
16ed0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
16ee0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
16ef0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
16f00 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
16f10 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
16f20 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
16f30 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
16f40 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
16f50 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
16f60 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
16f70 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
16f80 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
16f90 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
16fa0 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
16fb0 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
16fc0 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
16fd0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
16fe0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
16ff0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
17000 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
17010 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
17020 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
17030 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
17040 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
17050 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
17060 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
17070 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
17080 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
17090 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
170a0 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
170b0 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
170c0 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
170d0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
170e0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
170f0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
17100 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
17110 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
17120 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
17130 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
17140 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
17150 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
17160 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
17170 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
17180 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
17190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
171a0 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
171b0 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
171c0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
171d0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
171e0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
171f0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
17200 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
17210 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17220 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
17230 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
17240 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
17250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
17260 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
17270 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
17280 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
17290 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
172a0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
172b0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
172c0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
172d0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
172e0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
172f0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
17300 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
17310 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
17320 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
17330 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
17340 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
17350 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
17360 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
17370 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
17380 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
17390 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
173a0 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
173b0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
173c0 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
173d0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
173e0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
173f0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
17400 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
17410 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
17420 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
17430 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
17440 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
17450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
17460 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
17470 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
17480 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
17490 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
174a0 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
174b0 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
174c0 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
174d0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
174e0 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17500 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
17510 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
17520 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
17530 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
17540 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
17550 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
17560 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
17570 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
17580 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
17590 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
175a0 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
175b0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
175c0 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
175d0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
175e0 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
175f0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17600 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
17610 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
17620 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
17630 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
17640 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
17650 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
17660 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
17670 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
17680 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
17690 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
176a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
176b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
176c0 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
176d0 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
176e0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
176f0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
17700 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
17710 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
17720 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
17730 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
17740 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
17750 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
17760 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
17770 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
17780 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
17790 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
177a0 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
177b0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
177c0 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
177d0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
177e0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
177f0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
17800 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
17810 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
17820 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
17830 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
17840 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
17850 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
17860 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
17870 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
17880 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
17890 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
178a0 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
178b0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
178c0 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
178d0 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
178e0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
178f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
17900 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
17910 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
17920 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
17930 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
17940 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
17950 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
17960 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
17970 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
17980 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17990 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
179a0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
179b0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
179c0 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
179d0 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
179e0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
179f0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
17a00 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
17a10 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
17a20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
17a30 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
17a40 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
17a50 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
17a60 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
17a70 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
17a80 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
17a90 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
17aa0 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
17ab0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
17ac0 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
17ad0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
17ae0 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
17af0 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
17b00 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
17b10 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
17b20 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
17b30 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
17b40 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d   A bit in a Bitm
17b50 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ask.*/.#define M
17b60 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42  ASKBIT(n)   (((B
17b70 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a  itmask)1)<<(n)).
17b80 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33  #define MASKBIT3
17b90 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64  2(n) (((unsigned
17ba0 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f   int)1)<<(n))../
17bb0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
17bc0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
17bd0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
17be0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
17bf0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17c00 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
17c10 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
17c20 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
17c30 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
17c40 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
17c50 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
17c60 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
17c70 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
17c80 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
17c90 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
17ca0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
17cb0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
17cc0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
17cd0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
17ce0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
17cf0 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
17d00 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
17d10 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
17d20 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
17d30 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
17d40 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
17d50 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
17d60 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
17d70 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
17d80 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
17d90 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
17da0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
17db0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
17dc0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
17dd0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
17de0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
17df0 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
17e00 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
17e10 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
17e20 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
17e30 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
17e40 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
17e50 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
17e60 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
17e70 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
17e80 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
17e90 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
17ea0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
17eb0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
17ec0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
17ed0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
17ee0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
17ef0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
17f00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
17f10 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
17f20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
17f30 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
17f40 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
17f50 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
17f60 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
17f70 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
17f80 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
17f90 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
17fa0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
17fb0 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
17fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
17fd0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
17fe0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
17ff0 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
18000 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
18010 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
18020 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
18030 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
18040 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
18050 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
18060 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
18070 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
18080 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
18090 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
180a0 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
180b0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
180c0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
180d0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
180e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
180f0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
18100 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
18110 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
18120 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
18130 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
18140 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
18150 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
18160 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
18170 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
18180 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
18190 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
181a0 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
181b0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
181c0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
181d0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
181e0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
181f0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
18200 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
18210 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
18220 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
18230 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
18240 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
18250 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
18260 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
18270 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
18280 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
18290 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
182a0 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
182b0 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ne */.    struct
182c0 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e   {.      u8 join
182d0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
182e0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
182f0 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
18300 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
18310 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18320 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
18330 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
18340 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
18350 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
18360 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
18370 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
18380 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
18390 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
183a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
183b0 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
183c0 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
183d0 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
183e0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
183f0 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
18400 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
18410 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
18420 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
18430 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
18440 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
18450 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
18460 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
18470 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
18480 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18490 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
184a0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
184b0 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
184c0 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
184d0 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53   } fg;.#ifndef S
184e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
184f0 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
18500 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
18510 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
18520 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
18530 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
18540 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
18550 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
18560 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
18570 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
18580 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
18590 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
185a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
185b0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
185c0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
185d0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
185e0 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
185f0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
18600 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
18610 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
18620 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
18630 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
18640 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
18650 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
18660 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
18670 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
18680 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
18690 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
186a0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
186b0 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
186c0 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
186d0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
186e0 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
186f0 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
18700 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
18710 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
18720 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
18730 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
18740 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
18750 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
18760 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
18770 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
18780 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
18790 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
187a0 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
187b0 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
187c0 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
187d0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
187e0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
187f0 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
18800 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
18810 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
18820 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
18830 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
18840 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
18850 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
18860 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
18870 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
18880 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
18890 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
188a0 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
188b0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
188c0 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
188d0 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
188e0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
188f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
18900 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
18910 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
18920 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
18930 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
18940 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
18950 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
18960 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
18970 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
18980 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
18990 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
189a0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
189b0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
189c0 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
189d0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
189e0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
189f0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
18a00 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
18a10 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
18a20 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
18a30 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
18a40 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
18a50 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
18a60 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
18a70 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
18a80 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
18a90 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
18aa0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
18ab0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
18ac0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
18ad0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
18ae0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
18af0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
18b00 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
18b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18b20 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
18b30 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
18b40 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
18b50 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
18b60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18b70 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
18b80 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
18b90 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
18ba0 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
18bb0 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
18bc0 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
18bd0 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
18be0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
18bf0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
18c00 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
18c10 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
18c20 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
18c30 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
18c40 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
18c50 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e   WHERE_NO_AUTOIN
18c60 44 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f  DEX     0x0080 /
18c70 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d  * Disallow autom
18c80 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
18c90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
18ca0 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
18cb0 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
18cc0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
18cd0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
18ce0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18cf0 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20  BY       0x0200 
18d00 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
18d10 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
18d20 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
18d30 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
18d40 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30  STINCT    0x0400
18d50 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
18d60 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
18d70 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
18d80 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
18d90 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20        0x0800 /* 
18da0 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
18db0 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
18dc0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18dd0 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20  REOPEN_IDX      
18de0 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74   0x1000 /* Try t
18df0 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  o use OP_ReopenI
18e00 64 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  dx */.#define WH
18e10 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
18e20 49 52 4f 57 20 30 78 32 30 30 30 20 2f 2a 20 4f  IROW 0x2000 /* O
18e30 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
18e40 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
18e50 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
18e60 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
18e70 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
18e80 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
18e90 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
18ea0 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
18eb0 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
18ec0 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
18ed0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18ee0 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
18ef0 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
18f00 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
18f10 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18f20 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
18f30 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
18f40 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
18f50 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
18f60 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
18f70 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
18f80 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
18f90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
18fa0 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
18fb0 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
18fc0 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
18fd0 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
18fe0 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
18ff0 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
19000 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
19010 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
19020 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
19030 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
19040 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
19050 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
19060 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
19070 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
19080 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
19090 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
190a0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
190b0 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
190c0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
190d0 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
190e0 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
190f0 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
19100 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
19110 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
19120 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
19130 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
19140 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
19150 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
19160 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
19170 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
19180 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
19190 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
191a0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
191b0 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
191c0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
191d0 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
191e0 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
191f0 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
19200 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
19210 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
19220 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
19230 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
19240 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
19250 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
19260 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
19270 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
19280 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
19290 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
192a0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
192b0 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
192c0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
192d0 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
192e0 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
192f0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
19300 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
19310 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
19320 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
19330 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19340 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
19350 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
19360 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
19370 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
19380 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
19390 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
193a0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
193b0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
193c0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
193d0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
193e0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
193f0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
19400 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19410 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19420 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
19430 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
19440 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
19450 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
19460 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
19470 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
19480 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
19490 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
194a0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
194b0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
194c0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
194d0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
194e0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
194f0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
19500 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
19510 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
19520 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
19530 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
19540 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
19550 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19560 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
19570 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
19580 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
19590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
195a0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
195b0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
195c0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
195d0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
195e0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
195f0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
19600 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
19610 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
19620 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
19630 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
19640 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
19650 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
19660 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
19670 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
19680 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
19690 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
196a0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
196b0 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e  X..** .*/.#defin
196c0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
196d0 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
196e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
196f0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
19700 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
19710 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f  Agg    0x0002  /
19720 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
19730 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19740 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
19750 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
19760 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
19770 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
19780 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
19790 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
197a0 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
197b0 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
197c0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
197d0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
197e0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
197f0 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
19800 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0010  /* True if
19810 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
19820 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
19830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
19840 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
19850 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
19860 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
19870 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
19880 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
19890 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
198a0 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
198b0 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
198c0 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
198d0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
198e0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
198f0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
19900 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
19910 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
19920 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
19930 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
19940 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
19950 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
19960 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
19970 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
19980 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
19990 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
199a0 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
199b0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
199c0 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
199d0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
199e0 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
199f0 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
19a00 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
19a10 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
19a20 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
19a30 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
19a40 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
19a50 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
19a60 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
19a70 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
19a80 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
19a90 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
19aa0 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
19ab0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
19ac0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
19ad0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
19ae0 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
19af0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
19b00 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
19b10 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
19b20 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
19b30 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
19b40 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
19b50 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
19b60 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
19b70 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
19b80 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
19b90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
19ba0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
19bb0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
19bc0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
19bd0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
19be0 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
19bf0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
19c00 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
19c10 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
19c20 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
19c30 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
19c40 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
19c50 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
19c60 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
19c70 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
19c80 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
19c90 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
19ca0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
19cb0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
19cc0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
19cd0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
19ce0 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
19cf0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
19d00 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
19d10 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
19d20 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
19d30 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
19d40 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
19d70 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
19d80 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
19d90 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
19da0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
19db0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
19dc0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
19dd0 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
19de0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19df0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
19e00 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
19e10 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
19e20 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
19e30 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
19e40 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
19e50 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
19e60 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
19e70 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
19e80 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
19e90 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
19ea0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
19eb0 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
19ec0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
19ed0 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
19ee0 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
19ef0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
19f00 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
19f10 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
19f20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19f30 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
19f40 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
19f50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
19f60 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
19f70 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
19f80 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
19f90 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
19fa0 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
19fb0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
19fc0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
19fd0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
19fe0 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
19ff0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1a000 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1a010 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1a020 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1a030 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1a040 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1a050 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1a060 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1a070 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1a080 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1a090 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1a0a0 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1a0b0 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1a0c0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1a0d0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
1a0e0 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
1a0f0 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
1a100 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1a110 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1a120 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1a130 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1a140 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1a150 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1a160 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1a170 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1a180 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1a190 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1a1a0 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1a1b0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1a1c0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
1a1d0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1a1e0 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
1a1f0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1a200 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1a210 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30               0x0
1a230 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1a240 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1a250 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1a260 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
1a270 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  x0004  /* Identi
1a280 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1a290 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1a2a0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1a2b0 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f         0x0008  /
1a2c0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1a2d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1a2e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1a2f0 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
1a300 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  010  /* Uses the
1a310 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1a320 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1a330 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1a340 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 73      0x0020  /* s
1a350 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1a360 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1a370 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1a380 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1a390 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52 4f    0x0040  /* FRO
1a3a0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1a3b0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1a3c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1a3d0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
1a3e0 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0080  /* Part o
1a3f0 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1a400 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1a410 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1a420 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e 74   0x0100  /* Synt
1a430 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1a440 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1a450 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1a460 6c 75 65 20 20 20 20 20 20 30 78 30 32 30 30 20  lue      0x0200 
1a470 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1a480 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1a490 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1a4a0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1a4b0 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30 20 20  om      0x0400  
1a4c0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1a4d0 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1a4e0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1a4f0 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1a500 74 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20  t    0x0800  /* 
1a510 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1a520 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1a530 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1a540 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1a550 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
1a560 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1a570 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1a580 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1a590 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1a5a0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68 65    0x2000  /* The
1a5b0 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1a5c0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1a5d0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1a5e0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1a5f0 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20 63   0x4000  /* By c
1a600 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1a610 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1a620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1a630 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 20 30  ncludeHidden   0
1a640 78 38 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  x8000  /* Includ
1a650 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1a660 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a   in output */...
1a670 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1a680 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1a690 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1a6a0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a6b0 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1a6c0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1a6d0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1a6e0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1a6f0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1a700 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1a710 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1a720 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1a730 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1a740 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1a750 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20   index .**      
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a770 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1a780 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1a790 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1a7a0 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1a7b0 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1a7c0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1a7d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1a7e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1a7f0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1a800 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1a810 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1a820 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1a830 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a840 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1a850 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1a860 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1a870 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1a880 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1a890 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1a8a0 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1a8b0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1a8c0 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1a8d0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1a8e0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1a910 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1a920 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1a930 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1a940 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1a950 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1a960 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1a970 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1a980 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1a990 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1a9a0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1a9b0 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1a9c0 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1a9d0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1a9e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a9f0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1aa00 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1aa10 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1aa20 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1aa30 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1aa40 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1aa50 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1aa60 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1aa80 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1aa90 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1aaa0 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1aad0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1aae0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1aaf0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1ab10 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1ab20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1ab30 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1ab40 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1ab50 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1ab60 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1ab70 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1ab80 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1abb0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1abc0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1abd0 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  . .**           
1abe0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1abf0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1ac00 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1ac10 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1ac40 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1ac50 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1ac60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1ac70 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1ac80 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1ac90 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1aca0 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1acd0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1ace0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1acf0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ad10 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1ad20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1ad30 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1ad60 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1ad70 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1ad80 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1ad90 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1ada0 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1adb0 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1adc0 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1add0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1ade0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1adf0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ae10 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1ae20 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1ae30 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1ae60 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1ae70 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1ae80 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1aeb0 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1aec0 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1aed0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1af00 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1af10 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1af20 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1af30 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1af40 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1af50 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1af60 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1af70 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1af80 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1af90 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1afa0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1afb0 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1afc0 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1afd0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1afe0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1aff0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1b000 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1b010 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1b020 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b040 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1b050 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1b060 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1b070 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1b080 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1b090 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1b0a0 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1b0b0 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1b0c0 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1b0d0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1b0e0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1b110 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1b120 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1b130 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1b160 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1b170 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1b180 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1b190 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b1a0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1b1b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1b1c0 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1b1e0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1b1f0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1b200 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1b210 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1b230 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1b240 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1b250 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1b260 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1b270 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1b280 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1b2b0 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1b2c0 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1b2d0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1b2f0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1b300 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1b310 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1b320 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1b330 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1b340 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1b350 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1b360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b370 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1b380 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1b390 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1b3a0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1b3b0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1b3c0 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1b3d0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1b3e0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1b3f0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1b400 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1b410 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1b420 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1b430 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1b440 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1b450 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1b460 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1b470 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1b480 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1b490 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1b4a0 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1b4b0 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1b4c0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1b4d0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1b4e0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1b4f0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1b500 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1b510 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1b520 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1b530 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1b540 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1b550 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1b560 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1b570 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1b580 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1b590 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1b5a0 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1b5b0 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1b5c0 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1b5d0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1b5e0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1b5f0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1b600 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1b610 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1b620 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1b630 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1b640 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1b650 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1b660 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1b670 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1b680 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1b690 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1b6a0 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1b6b0 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1b6c0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1b6d0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1b6e0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1b6f0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1b700 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1b710 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1b720 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1b730 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1b740 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1b750 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1b760 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1b770 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1b780 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1b790 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1b7a0 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1b7b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b7c0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1b7d0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1b7e0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1b7f0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1b800 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1b810 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1b820 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1b830 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1b840 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1b850 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1b860 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1b870 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1b880 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1b890 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1b8a0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1b8b0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1b8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1b8d0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1b8e0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1b8f0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1b900 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1b910 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1b920 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1b930 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1b940 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1b950 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1b960 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1b970 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1b980 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1b990 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1b9a0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1b9b0 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1b9c0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
1b9d0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1b9e0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1b9f0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1ba00 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1ba10 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1ba20 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1ba30 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1ba40 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1ba50 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1ba60 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1ba70 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1ba80 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1ba90 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1baa0 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1bab0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1bac0 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1bad0 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
1bae0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1baf0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1bb00 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1bb10 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1bb20 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1bb30 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1bb40 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1bb50 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1bb60 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1bb70 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1bb80 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1bb90 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1bba0 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1bbb0 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1bbc0 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1bbd0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1bbe0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1bbf0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1bc00 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1bc10 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1bc20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1bc30 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1bc40 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1bc50 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1bc60 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1bc70 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1bc80 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1bc90 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1bca0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
1bcb0 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
1bcc0 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
1bcd0 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
1bce0 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
1bcf0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
1bd00 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1bd10 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1bd20 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1bd30 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bd40 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1bd50 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
1bd60 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1bd70 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1bd80 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1bd90 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1bda0 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1bdb0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1bdc0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1bdd0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1bde0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1bdf0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1be00 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1be10 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1be20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1be30 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1be40 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1be50 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1be60 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1be70 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1be80 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1be90 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1bea0 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1beb0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1bec0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1bed0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1bee0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1bef0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1bf00 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1bf10 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1bf20 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1bf30 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1bf40 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1bf50 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1bf60 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1bf70 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1bf80 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1bf90 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1bfa0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1bfb0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bfc0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1bfd0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1bfe0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1bff0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1c000 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
1c010 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1c020 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1c030 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1c040 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1c050 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1c060 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1c070 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1c080 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1c090 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1c0a0 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1c0b0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1c0c0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1c0d0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1c0e0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1c0f0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1c100 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1c110 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1c120 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1c130 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1c140 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1c150 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1c160 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1c170 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1c180 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1c190 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1c1a0 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1c1b0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1c1c0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1c1d0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1c1e0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1c1f0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1c200 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1c210 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1c220 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1c230 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1c240 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1c250 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1c260 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1c270 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1c280 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1c290 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1c2a0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1c2b0 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1c2c0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1c2d0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1c2e0 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1c2f0 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1c300 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1c310 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1c320 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1c330 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1c340 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1c350 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1c360 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1c370 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1c380 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1c390 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1c3a0 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1c3b0 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1c3c0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1c3d0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1c3e0 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1c3f0 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1c400 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1c410 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1c420 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1c430 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1c440 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1c450 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1c460 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1c470 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1c480 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1c490 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1c4a0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1c4b0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1c4c0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1c4d0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1c4e0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1c4f0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1c500 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1c510 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1c520 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1c530 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1c540 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1c550 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1c560 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1c570 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1c580 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1c590 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1c5a0 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1c5b0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1c5c0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1c5d0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1c5e0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1c5f0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1c600 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1c610 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1c620 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1c630 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1c640 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1c650 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1c660 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1c670 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1c680 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1c690 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1c6a0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
1c6b0 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1c6c0 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1c6d0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1c6e0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1c6f0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1c700 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1c710 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1c720 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1c730 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1c740 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1c750 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1c760 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1c770 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1c780 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1c790 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1c7a0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1c7b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c7c0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1c7d0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1c7e0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1c7f0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1c800 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1c810 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1c820 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1c830 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1c840 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1c850 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1c860 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1c870 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1c880 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1c890 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1c8a0 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1c8b0 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1c8c0 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1c8d0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1c8e0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1c8f0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1c900 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1c910 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1c920 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1c930 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c940 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1c950 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1c960 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c970 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1c980 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c990 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1c9a0 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1c9b0 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1c9c0 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1c9d0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1c9e0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1c9f0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1ca00 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1ca10 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1ca20 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1ca30 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1ca40 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1ca50 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1ca60 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1ca70 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1ca80 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1ca90 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1caa0 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1cab0 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1cac0 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1cad0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  stants */.  int 
1cae0 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
1caf0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
1cb00 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
1cb10 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
1cb20 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1cb30 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1cb40 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1cb50 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1cb60 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1cb70 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1cb80 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1cb90 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1cba0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1cbb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1cbc0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1cbd0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1cbe0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1cbf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1cc00 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1cc10 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1cc20 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1cc30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cc40 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1cc50 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1cc60 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
1cc70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cc80 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
1cc90 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1cca0 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
1ccb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
1ccc0 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
1ccd0 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
1cce0 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1ccf0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1cd00 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1cd10 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1cd20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1cd30 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1cd40 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1cd50 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1cd60 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1cd70 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20   int iFixedOp;  
1cd80 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62        /* Never b
1cd90 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20  ack out opcodes 
1cda0 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61  iFixedOp-1 or ea
1cdb0 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63  rlier */.  int c
1cdc0 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1cdd0 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1cde0 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1cdf0 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1ce00 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  s */.  int iSelf
1ce10 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
1ce20 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78  able of an index
1ce30 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72 65   whose exprs are
1ce40 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a   being coded */.
1ce50 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1ce60 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1ce70 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1ce80 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1ce90 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1cea0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1ceb0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1cec0 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1ced0 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1cee0 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1cef0 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1cf00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1cf10 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1cf20 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1cf30 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1cf40 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1cf50 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  els */.  struct 
1cf60 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1cf70 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1cf80 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1cf90 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1cfa0 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1cfb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1cfc0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1cfd0 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1cfe0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1cff0 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1d000 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1d010 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1d020 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1d030 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1d040 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1d050 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1d060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1d070 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1d080 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1d090 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1d0a0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1d0b0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1d0c0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1d0d0 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1d0e0 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1d0f0 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1d100 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1d110 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1d120 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1d130 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ntry */.  ExprLi
1d140 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1d150 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1d160 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1d170 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1d180 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1d190 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1d1a0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1d1b0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1d1c0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1d1d0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1d1e0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1d1f0 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1d200 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1d210 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1d220 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1d230 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1d240 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
1d250 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
1d260 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
1d270 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
1d280 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
1d290 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1d2a0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1d2b0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1d2c0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1d2d0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1d2e0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1d2f0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1d300 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1d310 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1d320 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1d330 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1d340 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1d350 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1d360 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1d370 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1d380 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1d390 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1d3a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d3b0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d3c0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1d3d0 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1d3e0 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1d3f0 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1d400 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1d410 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1d420 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1d430 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1d440 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1d450 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1d460 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1d470 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1d480 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1d490 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1d4a0 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1d4b0 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1d4c0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1d4d0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1d4e0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1d4f0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1d500 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
1d510 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
1d520 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
1d530 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
1d540 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1d550 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1d560 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1d570 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1d580 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1d590 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1d5a0 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1d5b0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1d5c0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1d5d0 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1d5e0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1d5f0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1d600 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1d610 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e  TABLE */.  u32 n
1d620 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20  QueryLoop;      
1d630 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66  /* Est number of
1d640 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61   iterations of a
1d650 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28   query (10*log2(
1d660 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64  N)) */.  u32 old
1d670 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1d680 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   Mask of old.* c
1d690 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1d6a0 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61  d */.  u32 newma
1d6b0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1d6c0 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1d6d0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1d6e0 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72  */.  u8 eTrigger
1d6f0 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  Op;       /* TK_
1d700 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1d710 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a  T or TK_DELETE *
1d720 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20  /.  u8 eOrconf; 
1d730 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1d740 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1d750 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67  policy for trigg
1d760 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38  er steps */.  u8
1d770 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73   disableTriggers
1d780 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69  ;  /* True to di
1d790 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a  sable triggers *
1d7a0 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
1d7b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d7c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d7d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d7e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
1d7f0 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   ** Above is con
1d800 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
1d810 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
1d820 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
1d830 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
1d840 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20  each recursion. 
1d850 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65   The boundary be
1d860 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20  tween these two 
1d870 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72  regions is deter
1d880 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  mined.  ** using
1d890 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
1d8a0 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61  nVar) so the nVa
1d8b0 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20  r field must be 
1d8c0 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a  the first field.
1d8d0 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75    ** in the recu
1d8e0 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20  rsive region..  
1d8f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d930 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74  ********/..  int
1d940 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
1d950 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d960 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
1d970 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
1d980 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  L so far */.  in
1d990 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20  t nzVar;        
1d9a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d9b0 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  r of available s
1d9c0 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20  lots in azVar[] 
1d9d0 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f  */.  u8 iPkSortO
1d9e0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
1d9f0 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f  * ASC or DESC fo
1da00 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  r INTEGER PRIMAR
1da10 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78  Y KEY */.  u8 ex
1da20 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
1da30 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1da40 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
1da50 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
1da60 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
1da70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1da80 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
1da90 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
1daa0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1dab0 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
1dac0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1dad0 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
1dae0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
1daf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
1db00 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
1db10 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
1db20 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20  nt nAlias;      
1db30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1db40 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65  er of aliased re
1db50 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73  sult set columns
1db60 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68   */.  int nHeigh
1db70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1db80 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
1db90 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
1dba0 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
1dbb0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1dbc0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
1dbd0 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20   int iSelectId; 
1dbe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44             /* ID
1dbf0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65   of current sele
1dc00 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ct for EXPLAIN o
1dc10 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69  utput */.  int i
1dc20 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20  NextSelectId;   
1dc30 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61       /* Next ava
1dc40 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44  ilable select ID
1dc50 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1dc60 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  put */.#endif.  
1dc70 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20  char **azVar;   
1dc80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
1dc90 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f  nters to names o
1dca0 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  f parameters */.
1dcb0 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
1dcc0 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
1dcd0 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
1dce0 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
1dcf0 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
1dd00 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
1dd10 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
1dd20 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
1dd30 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
1dd40 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
1dd50 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
1dd60 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
1dd70 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
1dd80 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
1dd90 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
1dda0 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
1ddb0 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
1ddc0 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
1ddd0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1dde0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1ddf0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
1de00 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
1de10 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
1de20 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20   callbacks */.  
1de30 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
1de40 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  ;         /* Tok
1de50 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
1de60 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
1de70 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
1de80 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1de90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
1dea0 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
1deb0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1dec0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1ded0 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1def0 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
1df00 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
1df10 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
1df20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
1df30 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
1df40 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
1df50 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
1df60 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
1df70 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
1df80 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1df90 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
1dfa0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
1dfb0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
1dfc0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
1dfd0 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
1dfe0 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
1dff0 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
1e000 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1e010 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
1e020 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
1e030 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
1e040 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
1e050 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
1e060 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
1e070 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
1e080 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e parse */.};../
1e090 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
1e0a0 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
1e0b0 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
1e0c0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
1e0d0 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
1e0e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1e0f0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
1e100 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1e110 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
1e120 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1e130 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
1e140 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
1e150 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1e160 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1e170 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1e180 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
1e190 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
1e1a0 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
1e1b0 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
1e1c0 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
1e1d0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
1e1e0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
1e1f0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
1e200 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
1e210 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1e220 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
1e230 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1e240 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
1e250 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1e260 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e270 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1e280 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
1e290 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
1e2a0 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
1e2b0 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  ous opcodes..*/.
1e2c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
1e2d0 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
1e2e0 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
1e2f0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1e300 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1e310 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1e320 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1e330 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1e340 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1e350 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e360 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1e370 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1e380 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1e390 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1e3a0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1e3b0 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1e3c0 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1e3d0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1e3e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e3f0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1e400 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1e410 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1e420 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1e430 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1e440 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1e450 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1e460 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1e470 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1e480 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
1e490 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
1e4a0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1e4b0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
1e4c0 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
1e4d0 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
1e4e0 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
1e4f0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1e500 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
1e510 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1e520 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
1e530 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1e540 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
1e550 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
1e560 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e570 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1e580 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
1e590 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
1e5a0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
1e5b0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e5c0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
1e5d0 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
1e5e0 6e 20 69 73 20 6f 70 65 6e 69 6e 67 20 66 6f 72  n is opening for
1e5f0 2d 64 65 6c 65 74 65 20 63 73 72 20 2a 2f 0a 23  -delete csr */.#
1e600 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
1e610 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30  ISREG       0x10
1e620 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
1e630 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
1e640 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
1e650 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
1e660 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
1e670 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
1e680 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
1e690 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a  tation */../*. *
1e6a0 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
1e6b0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
1e6c0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
1e6d0 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
1e6e0 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
1e6f0 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a  ct Trigger. . *.
1e700 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
1e710 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1e720 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
1e730 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
1e740 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
1e750 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
1e760 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
1e770 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
1e780 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1e790 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
1e7a0 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
1e7b0 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
1e7c0 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
1e7d0 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
1e7e0 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
1e7f0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
1e800 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
1e810 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
1e820 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
1e830 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
1e840 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1e850 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
1e860 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1e870 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
1e880 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
1e890 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
1e8a0 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
1e8b0 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
1e8c0 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
1e8d0 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
1e8e0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
1e8f0 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1e900 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
1e910 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
1e920 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
1e930 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
1e940 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
1e950 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
1e960 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1e970 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
1e980 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e990 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1e9a0 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1e9c0 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e9e0 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
1e9f0 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
1ea00 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
1ea10 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1ea20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1ea30 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1ea40 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1ea50 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
1ea60 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
1ea70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1ea80 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
1ea90 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
1eaa0 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
1eab0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
1eac0 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
1ead0 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
1eae0 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
1eaf0 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
1eb00 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
1eb10 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
1eb20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
1eb30 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
1eb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1eb60 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
1eb70 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
1eb80 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1eb90 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
1eba0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1ebb0 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
1ebc0 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
1ebd0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
1ebe0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1ebf0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
1ec00 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
1ec10 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
1ec20 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
1ec30 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
1ec40 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
1ec50 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
1ec60 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
1ec70 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
1ec80 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
1ec90 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
1eca0 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
1ecb0 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
1ecc0 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
1ecd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
1ece0 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
1ecf0 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a  ine which. .**.*
1ed00 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
1ed10 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
1ed20 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
1ed30 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
1ed40 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
1ed50 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
1ed60 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
1ed70 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
1ed80 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
1ed90 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
1eda0 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
1edb0 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
1edc0 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
1edd0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1ede0 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
1edf0 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
1ee00 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
1ee10 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
1ee20 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
1ee30 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e  ogram. . *. * In
1ee40 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1ee50 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
1ee60 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
1ee70 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
1ee80 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
1ee90 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
1eea0 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
1eeb0 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
1eec0 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
1eed0 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  e . * associated
1eee0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
1eef0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
1ef00 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1ef10 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
1ef20 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
1ef30 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
1ef40 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a  er-program.. * .
1ef50 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
1ef60 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
1ef70 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
1ef80 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
1ef90 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
1efa0 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
1efb0 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
1efc0 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
1efd0 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
1efe0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a  mined by the . *
1eff0 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
1f000 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
1f010 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
1f020 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
1f030 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
1f040 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
1f050 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
1f060 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1f070 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1f080 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
1f090 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1f0b0 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
1f0c0 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
1f0d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
1f0e0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
1f0f0 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1f100 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1f110 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1f120 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1f130 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1f140 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1f150 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1f160 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1f170 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f180 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1f190 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1f1a0 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1f1b0 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1f1c0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1f1d0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1f1e0 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1f1f0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1f210 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1f220 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1f230 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1f240 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f250 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1f260 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1f270 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
1f280 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
1f290 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1f2a0 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1f2b0 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1f2c0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1f2d0 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1f2e0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1f2f0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1f300 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f310 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1f320 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
1f330 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61  K_UPDATE). * zTa
1f340 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
1f350 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1f360 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a  able to update..
1f370 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1f380 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1f390 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1f3a0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1f3b0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1f3d0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1f3e0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1f3f0 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1f400 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1f410 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1f420 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1f430 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1f440 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1f450 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1f460 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1f470 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1f480 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1f490 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1f4a0 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1f4b0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1f4c0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1f4d0 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1f4e0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1f4f0 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1f500 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1f510 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1f520 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1f530 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1f540 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1f550 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1f560 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1f570 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1f580 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1f590 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20  tatement or RHS 
1f5a0 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53  of INSERT INTO S
1f5b0 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63  ELECT ... */.  c
1f5c0 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20  har *zTarget;   
1f5d0 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
1f5e0 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
1f5f0 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
1f600 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1f610 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1f620 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1f630 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
1f640 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
1f650 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
1f660 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
1f670 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20  for UPDATE. */. 
1f680 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
1f690 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
1f6a0 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
1f6b0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1f6c0 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
1f6d0 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
1f6e0 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
1f6f0 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
1f700 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
1f710 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
1f720 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
1f730 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
1f740 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1f750 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1f760 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
1f770 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1f780 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
1f790 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
1f7a0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
1f7b0 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
1f7c0 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
1f7d0 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70  plicit.  .*/.typ
1f7e0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
1f7f0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
1f800 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
1f810 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1f820 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
1f830 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
1f840 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
1f850 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
1f860 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1f870 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
1f880 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
1f890 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
1f8a0 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
1f8b0 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
1f8c0 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
1f8d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1f8e0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
1f8f0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
1f900 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
1f910 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
1f920 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1f930 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
1f940 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1f950 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1f960 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
1f970 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
1f980 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
1f990 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
1f9a0 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
1f9b0 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
1f9c0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
1f9d0 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
1f9e0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
1f9f0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
1fa00 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
1fa10 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
1fa20 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
1fa30 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
1fa40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
1fa50 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
1fa60 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1fa70 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
1fa80 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
1fa90 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
1faa0 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
1fab0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
1fac0 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
1fad0 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
1fae0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
1faf0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
1fb00 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
1fb10 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
1fb20 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
1fb30 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
1fb40 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
1fb50 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
1fb60 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
1fb70 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
1fb80 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
1fb90 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
1fba0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1fbb0 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
1fbc0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
1fbd0 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
1fbe0 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ge */.  u8   acc
1fbf0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
1fc00 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
1fc10 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
1fc20 47 20 2a 2f 0a 20 20 75 38 20 20 20 62 4d 61 6c  G */.  u8   bMal
1fc30 6c 6f 63 65 64 3b 20 20 20 20 20 20 2f 2a 20 7a  loced;      /* z
1fc40 54 65 78 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  Text points to a
1fc50 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
1fc60 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
1fc70 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
1fc80 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1fc90 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a  _TOOBIG  2../*.*
1fca0 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1fcb0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1fcc0 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1fcd0 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1fce0 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1fcf0 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1fd00 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1fd10 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1fd20 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1fd30 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1fd40 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1fd50 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1fd60 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1fd70 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1fd80 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1fd90 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1fda0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1fdb0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1fdc0 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1fdd0 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1fde0 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1fdf0 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1fe00 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1fe10 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1fe20 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1fe30 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1fe40 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1fe50 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1fe60 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1fe70 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1fe80 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1fe90 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1fea0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1feb0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1fec0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1fed0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1fee0 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1ff10 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1ff20 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1ff30 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1ff40 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ff50 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1ff60 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1ff70 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ff90 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1ffa0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1ffb0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1ffc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ffd0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1ffe0 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1fff0 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
20000 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20020 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
20030 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
20040 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
20050 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20070 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
20080 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
20090 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
200a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
200b0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
200c0 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
200d0 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
200e0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
200f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
20100 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
20110 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
20120 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
20150 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
20160 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
20170 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
20180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
20190 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
201a0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
201b0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
201c0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
201d0 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
201e0 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
201f0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
20200 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
20210 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
20220 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
20230 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
20240 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
20250 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
20260 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
20270 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
20280 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202a0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
202b0 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
202c0 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
202f0 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
20300 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
20310 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
20320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
20330 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
20340 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
20350 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
20360 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
20370 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
20380 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
20390 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
203c0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
203d0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
203e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
203f0 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
20400 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
20410 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
20440 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
20450 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
20460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20470 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
20480 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
20490 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
204a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204b0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
204c0 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
204d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20500 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
20510 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
20520 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20540 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
20550 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
20560 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
20570 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
20580 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
20590 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
205a0 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
205b0 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
205e0 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
205f0 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
20600 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
20610 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
20620 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
20630 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
20640 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
20650 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
20660 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
20670 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
20680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20690 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
206a0 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
206b0 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
206c0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
206d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
206e0 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
206f0 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
20700 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
20710 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
20720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20730 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
20740 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
20750 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
20760 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
20770 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20780 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
20790 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
207a0 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
207b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
207c0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
207d0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
207e0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
207f0 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20810 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
20820 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
20830 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
20840 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
20850 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
20860 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
20870 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
20880 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
20890 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
208a0 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
208b0 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
208c0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
208d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
208e0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
208f0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
20900 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
20910 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
20920 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
20930 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
20940 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
20950 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
20960 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
20970 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
20980 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
20990 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
209a0 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
209b0 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
209c0 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
209d0 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
209e0 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
209f0 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
20a00 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
20a10 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
20a20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
20a30 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
20a40 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
20a50 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
20a60 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
20a70 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
20a80 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
20ab0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
20ac0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
20ad0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
20ae0 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65  TEST.  int (*xTe
20af0 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29  stCallback)(int)
20b00 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f  ;        /* Invo
20b10 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61  ked by sqlite3Fa
20b20 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64  ultSim() */.#end
20b30 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  if.  int bLocalt
20b40 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
20b50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
20b60 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
20b70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a  () calls */.};..
20b80 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
20b90 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
20ba0 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
20bb0 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
20bc0 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
20bd0 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
20be0 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
20bf0 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
20c00 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
20c10 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
20c20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
20c30 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
20c40 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
20c50 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
20c60 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
20c70 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
20c80 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
20c90 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
20ca0 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
20cb0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
20cc0 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
20cd0 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
20ce0 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
20cf0 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
20d00 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
20d10 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
20d20 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
20d30 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
20d40 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
20d50 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
20d60 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
20d70 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
20d80 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
20d90 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
20da0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
20db0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
20dc0 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
20dd0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
20de0 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
20df0 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
20e00 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
20e10 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
20e20 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
20e30 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e  ct Walker {.  in
20e40 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
20e50 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
20e60 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
20e70 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
20e80 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
20e90 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
20ea0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
20eb0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
20ec0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
20ed0 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
20ee0 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
20ef0 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
20f00 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
20f10 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61   SELECTs */.  Pa
20f20 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
20f50 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
20f60 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
20f70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20f90 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
20fa0 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
20fb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
20fe0 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
20ff0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
21020 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
21030 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
21040 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
21070 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
21080 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
210b0 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
210c0 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
210f0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
21100 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
21110 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21130 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
21140 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
21150 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
21160 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21170 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
21180 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
21190 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43  */.    struct CC
211a0 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e  urHint *pCCurHin
211b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
211c0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64    /* Used by cod
211d0 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f  eCursorHint() */
211e0 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
211f0 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
21200 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
21210 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
21220 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
21230 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
21240 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
21250 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
21260 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
21270 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
21280 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
21290 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
212a0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
212b0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
212c0 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
212d0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
212e0 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e  sqlite3ExprWalkN
212f0 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  oop(Walker*, Exp
21300 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  r*);../*.** Retu
21310 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
21320 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
21330 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
21340 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
21350 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
21360 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
21370 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
21380 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
21390 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
213a0 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
213b0 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
213c0 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
213d0 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
213e0 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
213f0 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
21400 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
21410 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
21420 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
21430 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
21440 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
21450 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
21460 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
21470 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
21480 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
21490 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
214a0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
214b0 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
214c0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
214d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
214e0 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
214f0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
21500 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
21510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21520 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
21530 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
21540 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
21550 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
21560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
21570 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
21580 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
21590 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
215a0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
215b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
215c0 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
215d0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
215e0 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
215f0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
21600 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
21610 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
21620 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
21630 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
21640 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
21650 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
21660 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
21670 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
21680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
21690 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
216a0 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
216b0 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
216c0 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
216d0 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
216e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
216f0 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
21700 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
21710 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
21720 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
21730 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
21740 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
21750 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
21760 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
21770 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
21780 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
21790 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
217a0 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
217b0 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
217c0 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
217d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
217e0 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
217f0 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
21800 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
21810 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
21820 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
21830 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
21840 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
21850 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
21860 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
21870 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
21880 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
21890 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
218a0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
218b0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
218c0 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
218d0 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
218f0 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
21900 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
21930 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
21940 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
21950 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
21960 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
219a0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
219b0 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
219c0 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
219d0 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
219e0 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
219f0 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
21a00 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
21a10 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
21a20 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
21a30 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
21a40 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
21a50 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
21a60 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
21a70 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
21a80 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
21a90 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
21aa0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
21ab0 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
21ac0 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
21ad0 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
21ae0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
21af0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
21b00 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
21b10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
21b20 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
21b30 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
21b40 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
21b50 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
21b60 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
21b70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
21b80 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
21b90 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
21ba0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
21bb0 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
21bc0 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
21bd0 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
21be0 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  _).../*.** FTS4 
21bf0 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
21c00 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
21c10 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
21c20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
21c30 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
21c40 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
21c50 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
21c60 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
21c70 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
21c80 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
21c90 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
21ca0 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
21cb0 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
21cc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
21cd0 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
21ce0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
21cf0 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
21d00 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
21d10 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66  LE_FTS3 1.#endif
21d20 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70  ../*.** The ctyp
21d30 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65  e.h header is ne
21d40 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43  eded for non-ASC
21d50 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20  II systems.  It 
21d60 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65  is also.** neede
21d70 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46  d by FTS3 when F
21d80 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20  TS3 is included 
21d90 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  in the amalgamat
21da0 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ion..*/.#if !def
21db0 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49  ined(SQLITE_ASCI
21dc0 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  I) || \.    (def
21dd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
21de0 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69  LE_FTS3) && defi
21df0 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47  ned(SQLITE_AMALG
21e00 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c  AMATION)).# incl
21e10 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65  ude <ctype.h>.#e
21e20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
21e30 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
21e40 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64   mimic the stand
21e50 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63  ard library func
21e60 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c  tions toupper(),
21e70 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69  .** isspace(), i
21e80 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69  salnum(), isdigi
21e90 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74  t() and isxdigit
21ea0 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  (), respectively
21eb0 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20  . The.** sqlite 
21ec0 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  versions only wo
21ed0 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  rk for ASCII cha
21ee0 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c  racters, regardl
21ef0 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a  ess of locale..*
21f00 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
21f10 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73  ASCII.# define s
21f20 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
21f30 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33    ((x)&~(sqlite3
21f40 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21f50 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32  ed char)(x)]&0x2
21f60 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  0)).# define sql
21f70 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
21f80 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
21f90 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
21fa0 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65  )(x)]&0x01).# de
21fb0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
21fc0 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65  num(x)   (sqlite
21fd0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
21fe0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
21ff0 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  06).# define sql
22000 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
22010 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
22020 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
22030 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65  )(x)]&0x02).# de
22040 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
22050 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65  git(x)   (sqlite
22060 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
22070 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
22080 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  04).# define sql
22090 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
220a0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
220b0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
220c0 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65  )(x)]&0x08).# de
220d0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
220e0 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65  wer(x)   (sqlite
220f0 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75  3UpperToLower[(u
22100 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
22110 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  ]).#else.# defin
22120 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
22130 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
22140 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
22150 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22160 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
22170 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
22180 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
22190 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
221a0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
221b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
221c0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
221d0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
221e0 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
221f0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
22200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
22210 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
22220 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
22230 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
22240 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
22250 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
22260 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
22270 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22280 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
22290 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
222a0 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a  har)(x)).#endif.
222b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
222c0 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
222d0 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69  N_DIAGS.int sqli
222e0 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
222f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22300 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
22310 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23   prototypes.*/.#
22320 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
22330 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  rICmp sqlite3_st
22340 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65  ricmp.int sqlite
22350 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
22360 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
22370 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
22380 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
22390 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
223a0 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
223b0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
223c0 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
223d0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
223e0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
223f0 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
22400 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
22410 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
22420 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
22430 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
22440 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
22450 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
22460 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
22470 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22480 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
22490 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
224a0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
224b0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
224c0 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
224d0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
224e0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
224f0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
22500 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
22510 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
22520 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
22530 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
22540 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
22550 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
22560 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
22570 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
22580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
22590 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
225a0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
225b0 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
225c0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
225d0 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
225e0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
225f0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
22600 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
22610 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
22620 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
22630 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
22640 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
22650 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
22660 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
22670 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
22680 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
22690 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
226a0 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a  (void));.#endif.
226b0 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
226c0 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
226d0 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
226e0 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
226f0 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
22700 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
22710 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
22720 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
22730 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
22740 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
22750 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
22760 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
22770 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
22780 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
22790 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
227a0 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
227b0 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
227c0 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
227d0 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
227e0 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
227f0 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
22800 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
22810 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
22820 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
22830 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
22840 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
22850 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
22860 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
22870 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
22880 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
22890 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
228a0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
228b0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
228c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
228d0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
228e0 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
228f0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
22900 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
22910 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
22920 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
22930 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
22940 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22950 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
22960 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
22970 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
22980 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22990 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
229a0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
229b0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
229c0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
229d0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
229e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
229f0 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
22a00 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
22a10 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
22a20 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
22a30 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
22a40 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
22a50 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
22a60 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
22a70 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
22a80 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
22a90 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
22aa0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
22ab0 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
22ac0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
22ad0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
22ae0 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
22af0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
22b00 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
22b10 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
22b20 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
22b30 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22b40 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20  ITE_MUTEX_OMIT) 
22b50 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
22b60 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20  TE_MUTEX_NOOP). 
22b70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
22b80 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29  oryBarrier(void)
22b90 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22ba0 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
22bb0 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a  rrier().#endif..
22bc0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
22bd0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
22be0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
22bf0 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
22c00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22c10 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
22c20 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22c30 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
22c40 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
22c50 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
22c60 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
22c70 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
22c80 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
22c90 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
22ca0 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
22cb0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
22cc0 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
22cd0 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  id);..#ifndef SQ
22ce0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
22cf0 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
22d00 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
22d10 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
22d20 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
22d30 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
22d40 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
22d50 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
22d60 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
22d70 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
22d80 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
22d90 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
22da0 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
22db0 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
22dc0 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
22dd0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
22de0 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
22df0 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
22e00 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
22e10 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
22e20 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
22e30 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
22e40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22e50 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
22e60 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
22e70 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
22e80 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
22e90 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
22ea0 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ..#define SQLITE
22eb0 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
22ec0 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51   0x01.#define SQ
22ed0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
22ee0 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73  UNC  0x02.void s
22ef0 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
22f00 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
22f10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
22f20 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ist);.void sqlit
22f30 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
22f40 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
22f50 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
22f60 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
22f70 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
22f80 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
22f90 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
22fa0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
22fb0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
22fc0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
22fd0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
22fe0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22ff0 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
23000 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
23010 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
23020 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
23030 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
23040 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
23050 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
23060 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
23070 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
23080 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
23090 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
230a0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
230b0 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
230c0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
230d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
230e0 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28  reeViewExprList(
230f0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
23100 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20   ExprList*, u8, 
23110 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
23120 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
23130 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56  ViewSelect(TreeV
23140 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65  iew*, const Sele
23150 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  ct*, u8);.  void
23160 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
23170 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20  With(TreeView*, 
23180 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29  const With*, u8)
23190 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  ;.#endif...void 
231a0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
231b0 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
231c0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
231d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
231e0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
231f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
23200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71  ;.int sqlite3Deq
23210 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74  uote(char*);.int
23220 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
23230 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
23240 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
23250 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
23260 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
23270 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
23280 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23290 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
232a0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
232b0 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
232c0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
232d0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
232e0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
232f0 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
23300 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
23310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23320 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
23330 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
23340 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
23350 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
23360 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  rse*);.Expr *sql
23370 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
23380 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
23390 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
233a0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
233b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
233c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
233d0 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
233e0 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
233f0 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
23400 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
23410 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
23420 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
23430 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
23440 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
23450 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33  3ExprAnd(sqlite3
23460 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  *,Expr*, Expr*);
23470 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
23480 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65  prFunction(Parse
23490 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  *,ExprList*, Tok
234a0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
234b0 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
234c0 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
234d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
234e0 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
234f0 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
23500 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
23510 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
23520 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
23530 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23540 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
23550 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73  ortOrder(ExprLis
23560 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
23570 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
23580 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
23590 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
235a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
235b0 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
235c0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
235d0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
235e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
235f0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
23600 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
23610 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
23620 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
23630 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23640 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
23650 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
23660 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
23670 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
23680 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
23690 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
236a0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
236b0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
236c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
236d0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
236e0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
236f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
23700 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
23710 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
23720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
23730 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
23740 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
23750 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
23760 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
23770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23780 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
23790 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
237a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
237b0 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
237c0 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
237d0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
237e0 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
237f0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
23800 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
23810 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
23820 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
23830 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
23840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
23850 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
23860 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
23870 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
23880 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
23890 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
238a0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
238b0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
238c0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
238d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
238e0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
238f0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
23900 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
23910 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
23920 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
23930 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
23940 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
23950 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
23960 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
23970 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
23980 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
23990 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
239a0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
239b0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
239c0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
239d0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
239e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
239f0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
23a00 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
23a10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
23a20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
23a30 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
23a40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
23a50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
23a60 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
23a70 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
23a80 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
23a90 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
23aa0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
23ab0 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
23ac0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
23ad0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23ae0 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
23af0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
23b00 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
23b10 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
23b20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
23b30 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
23b40 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
23b50 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
23b60 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
23b70 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
23b80 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
23b90 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
23ba0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
23bb0 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
23bc0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
23bd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
23be0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
23bf0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
23c00 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
23c10 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
23c20 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
23c30 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
23c40 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
23c50 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
23c60 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
23c70 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
23c80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
23c90 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
23ca0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
23cb0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
23cc0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
23cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23ce0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
23cf0 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
23d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
23d10 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
23d20 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
23d30 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
23d40 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
23d50 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
23d60 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
23d70 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
23d80 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
23d90 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
23da0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
23db0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
23dc0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
23dd0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
23de0 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
23df0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
23e00 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
23e10 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
23e20 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
23e30 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
23e40 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
23e50 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
23e60 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
23e70 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
23e80 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
23e90 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
23ea0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
23eb0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
23ec0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
23ed0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
23ee0 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
23ef0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23f00 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
23f10 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
23f20 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
23f30 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
23f40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
23f50 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
23f60 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
23f70 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
23f80 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
23f90 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
23fa0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
23fb0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23fc0 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
23fd0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
23fe0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23ff0 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
24000 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
24010 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
24020 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
24030 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
24040 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
24050 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
24060 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
24070 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
24080 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
24090 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
240a0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
240b0 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
240c0 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
240d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
240e0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
240f0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
24100 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
24110 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
24120 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
24130 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
24140 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
24150 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
24160 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
24170 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
24180 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
24190 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
241a0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
241b0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
241c0 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
241d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
241e0 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
241f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
24200 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
24210 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
24220 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
24230 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
24240 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
24250 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
24260 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
24270 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
24280 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
24290 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
242a0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
242b0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
242c0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
242f0 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
24300 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
24310 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
24320 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
24330 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
24340 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
24350 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
24360 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
24370 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
24380 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
24390 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
243a0 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
243b0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
243c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
243d0 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
243e0 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
243f0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
24400 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
24410 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
24420 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
24430 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
24440 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
24450 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
24460 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
24470 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
24480 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
24490 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
244a0 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
244b0 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  har**);.Index *s
244c0 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
244d0 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
244e0 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
244f0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
24500 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
24530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
24540 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
24550 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
24560 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
24570 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
24580 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
24590 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
245a0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
245b0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
245c0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
245d0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
245f0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  pr*,ExprList*,u1
24600 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  6,Expr*,Expr*);.
24610 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
24620 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
24630 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
24640 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
24650 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
24660 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
24670 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
24680 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
24690 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
246a0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
246b0 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
246c0 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
246d0 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
246e0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
246f0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
24700 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
24710 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
24720 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
24730 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
24740 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
24750 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
24760 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72  Expr*,Expr*,char
24770 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
24780 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
24790 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
247a0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
247b0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
247c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
247d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
247e0 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
247f0 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
24800 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
24810 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
24820 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
24830 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
24840 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
24850 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20  hereInfo*);.u64 
24860 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70  sqlite3WhereOutp
24870 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65  utRowCount(Where
24880 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
24890 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
248a0 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ct(WhereInfo*);.
248b0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
248c0 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49  IsOrdered(WhereI
248d0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
248e0 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
248f0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
24900 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
24910 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
24920 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
24930 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
24940 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
24950 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
24960 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
24970 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
24980 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
24990 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
249a0 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
249b0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
249c0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
249d0 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
249e0 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
249f0 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
24a00 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
24a10 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
24a20 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
24a30 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
24a40 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
24a50 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
24a60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
24a70 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
24a80 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
24a90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
24aa0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24ab0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
24ac0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
24ad0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
24ae0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
24af0 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67  deGetColumnToReg
24b00 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
24b10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
24b20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24b30 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
24b40 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
24b50 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
24b60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24b70 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
24b80 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
24b90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24ba0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
24bb0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24bc0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24bd0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
24be0 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
24bf0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
24c00 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
24c10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
24c20 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
24c30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24c40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
24c50 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
24c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24c70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
24c80 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
24c90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24ca0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
24cb0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
24cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24cd0 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
24ce0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
24cf0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24d00 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
24d10 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
24d20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24d30 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
24d40 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
24d50 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
24d60 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
24d70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24d80 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
24d90 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
24da0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24db0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24dc0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
24dd0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
24de0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24df0 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
24e00 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
24e10 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
24e20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
24e30 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
24e40 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
24e50 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
24e60 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
24e70 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
24e80 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
24e90 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
24ea0 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
24eb0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
24ec0 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
24ed0 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
24ee0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
24ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24f00 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
24f10 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
24f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24f30 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
24f40 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
24f50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24f60 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
24f70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
24f80 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
24f90 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
24fa0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24fb0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24fc0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
24fd0 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
24fe0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
24ff0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25000 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
25010 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
25020 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
25030 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
25040 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
25050 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
25060 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
25070 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25080 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
25090 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
250a0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
250b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
250c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
250d0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
250e0 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
250f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
25100 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25110 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
25120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
25130 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
25140 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
25150 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
25160 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
25170 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25180 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
25190 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
251a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
251b0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
251c0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
251d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
251e0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
251f0 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
25200 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
25210 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
25220 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
25230 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
25240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25250 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
25260 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
25270 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25280 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
25290 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
252a0 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
252b0 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
252c0 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
252d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
252e0 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
252f0 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
25300 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
25310 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
25320 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
25330 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
25340 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
25350 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
25360 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
25370 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
25380 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25390 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
253a0 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
253b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
253c0 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
253d0 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
253e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
253f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
25400 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
25410 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25420 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
25430 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
25440 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
25450 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
25460 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25470 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
25480 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
25490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
254a0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
254b0 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
254c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
254d0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
254e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
254f0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
25500 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
25510 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
25520 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
25530 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
25540 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
25550 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
25560 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
25570 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
25580 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
25590 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
255a0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
255b0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
255c0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
255d0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
255e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
255f0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
25600 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25610 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
25620 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
25630 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
25640 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
25650 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
25660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
25670 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
25680 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
25690 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
256a0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
256b0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
256c0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
256d0 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
256e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
256f0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
25700 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
25710 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
25720 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
25730 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
25740 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
25750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25760 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
25770 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
25780 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
25790 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
257a0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
257b0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
257c0 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257e0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
257f0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
25800 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
25810 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
25820 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
25830 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
25840 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
25850 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
25860 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
25870 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
25880 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
25890 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
258a0 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
258b0 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
258c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
258d0 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
258e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
258f0 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
25900 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25910 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
25920 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
25930 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
25940 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
25950 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
25960 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
25970 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
25980 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
25990 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
259a0 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
259b0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
259c0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
259d0 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
259e0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
259f0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
25a00 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
25a10 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
25a20 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
25a30 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
25a40 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
25a50 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
25a60 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
25a70 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
25a80 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
25a90 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
25aa0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
25ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25ac0 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
25ad0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
25ae0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25af0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
25b00 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
25b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
25b20 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
25b30 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
25b40 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
25b50 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
25b60 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
25b70 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
25b80 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
25b90 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
25ba0 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
25bb0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
25bc0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
25bd0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
25be0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
25bf0 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e  egisterGlobalFun
25c00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
25c10 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
25c20 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
25c30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
25c40 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
25c50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
25c60 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
25c70 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
25c80 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
25c90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
25ca0 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
25cb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
25cc0 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
25cd0 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
25ce0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
25cf0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
25d00 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
25d10 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
25d20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
25d30 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
25d40 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
25d50 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
25d60 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
25d90 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
25da0 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
25db0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
25dc0 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
25dd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25de0 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
25df0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
25e00 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
25e10 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
25e20 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
25e30 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
25e40 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
25e50 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
25e60 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
25e70 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
25e80 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
25e90 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
25ea0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
25eb0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
25ec0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
25ed0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
25ee0 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
25ef0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
25f00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
25f20 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
25f30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
25f40 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
25f50 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
25f60 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
25f70 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
25f80 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
25f90 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
25fa0 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
25fb0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
25fc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
25fd0 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
25fe0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
25ff0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
26000 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
26010 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
26020 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
26030 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
26040 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
26050 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
26060 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
26070 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
260a0 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
260b0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
260c0 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
260d0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
260e0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
260f0 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
26100 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
26110 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
26120 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
26130 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
26140 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
26150 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
26160 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
26170 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
26180 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
26190 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
261a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
261b0 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
261c0 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
261d0 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
261e0 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
261f0 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
26200 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
26210 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
26220 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
26230 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
26240 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26250 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
26260 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
26270 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
26280 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
26290 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
262a0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
262b0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
262c0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
262d0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
262e0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
262f0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
26300 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
26310 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
26320 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
26330 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
26340 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
26350 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
26360 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
26370 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
26380 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
26390 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
263a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
263b0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
263c0 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
263d0 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
263e0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
263f0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
26400 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
26410 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
26420 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
26430 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
26440 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
26450 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
26460 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
26470 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
26480 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
26490 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
264a0 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
264b0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
264c0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
264d0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
264e0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
264f0 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
26500 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
26510 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
26520 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
26530 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
26540 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
26550 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
26560 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
26570 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
26580 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
26590 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
265a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
265b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
265c0 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
265d0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
265e0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
265f0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
26600 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
26610 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
26620 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
26630 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
26640 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26650 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
26660 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
26670 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
26680 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
26690 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
266a0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
266b0 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
266c0 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
266d0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
266e0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
266f0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
26700 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
26710 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
26720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
26730 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
26740 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
26750 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
26760 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
26770 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
26780 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
26790 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
267a0 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
267b0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
267c0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
267d0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
267e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
267f0 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
26800 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
26810 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
26820 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
26830 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
26840 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
26850 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
26860 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
26870 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
26880 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
26890 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
268a0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
268b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
268c0 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
268d0 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
268e0 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
268f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
26900 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
26910 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
26920 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
26930 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
26940 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
26950 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
26960 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
26970 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
26980 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
26990 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
269a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
269b0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
269c0 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
269d0 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34  ble);.#endif.u64
269e0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
269f0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a  Int(LogEst);../*
26a00 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
26a10 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
26a20 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
26a30 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
26a40 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
26a50 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
26a60 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
26a70 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
26a80 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
26a90 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
26aa0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
26ab0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
26ac0 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
26ad0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
26ae0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
26af0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
26b00 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
26b10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26b20 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
26b30 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
26b40 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
26b50 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
26b60 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
26b70 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
26b80 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
26b90 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
26ba0 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
26bb0 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
26bc0 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
26bd0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
26be0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
26bf0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
26c00 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
26c10 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
26c20 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
26c30 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
26c40 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
26c50 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
26c60 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
26c70 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
26c80 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
26c90 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
26ca0 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
26cb0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
26cc0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
26cd0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
26ce0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
26cf0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
26d00 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
26d10 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
26d20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
26d30 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
26d40 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
26d50 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
26d60 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
26d70 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
26d80 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
26d90 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
26da0 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
26db0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
26dc0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
26dd0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
26de0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
26df0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
26e00 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
26e10 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
26e20 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
26e30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
26e40 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
26e50 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
26e60 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
26e70 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
26e80 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
26e90 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
26ea0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
26eb0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
26ec0 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
26ed0 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
26ee0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
26ef0 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
26f00 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
26f10 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
26f20 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
26f30 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
26f40 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
26f50 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
26f60 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
26f70 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
26f80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
26f90 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
26fa0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
26fb0 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
26fc0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
26fd0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
26fe0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26ff0 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
27000 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
27010 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
27020 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
27030 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
27040 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
27050 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
27060 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
27070 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
27080 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
27090 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
270a0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
270b0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
270c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
270d0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
270e0 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
270f0 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
27100 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
27110 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
27120 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
27130 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
27140 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
27150 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
27160 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
27170 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
27180 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
27190 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
271a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
271b0 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
271c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
271d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
271e0 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
271f0 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
27200 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
27210 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
27220 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
27230 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
27240 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
27250 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
27260 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
27270 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
27280 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
27290 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
272a0 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
272b0 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
272c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
272d0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
272e0 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
272f0 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
27300 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
27310 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
27320 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
27330 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
27340 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
27350 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
27360 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
27370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
27380 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
27390 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
273a0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
273b0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
273c0 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
273d0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
273e0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
273f0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
27400 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27410 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
27420 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
27430 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
27440 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
27450 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  e3 *);.char *sql
27460 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
27470 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
27480 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  id*, int, u8);.i
27490 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
274a0 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
274b0 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
274c0 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
274d0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
274e0 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
274f0 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
27500 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
27510 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
27520 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
27530 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
27540 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
27550 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
27560 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
27570 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
27580 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
27590 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
275a0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
275b0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
275c0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
275d0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
275e0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
275f0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
27600 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
27610 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
27620 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
27630 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
27640 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
27650 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
27660 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
27670 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
27680 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
27690 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
276a0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
276b0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
276c0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
276d0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
276e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
276f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
27700 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
27710 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
27720 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
27730 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
27740 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
27750 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
27760 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
27770 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27780 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
27790 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
277a0 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
277b0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
277c0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
277d0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
277e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
277f0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
27800 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
27810 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
27820 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
27830 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
27840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27850 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
27860 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
27870 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
27880 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
27890 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
278a0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
278b0 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
278c0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
278d0 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
278e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
278f0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
27900 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
27910 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
27920 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
27930 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
27940 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
27950 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
27960 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
27970 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27980 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
27990 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
279a0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
279b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
279c0 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
279d0 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
279e0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
279f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
27a00 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
27a10 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
27a20 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
27a30 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
27a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
27a50 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
27a60 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
27a70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27a80 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
27a90 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
27aa0 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
27ab0 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
27ac0 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
27ad0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
27ae0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
27af0 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
27b00 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
27b10 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
27b20 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
27b30 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
27b40 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
27b50 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
27b60 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
27b70 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27b80 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
27b90 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
27ba0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27bb0 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
27bc0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
27bd0 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
27be0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
27bf0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
27c00 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
27c10 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
27c20 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
27c30 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
27c40 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
27c50 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
27c60 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
27c70 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
27c80 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
27c90 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
27ca0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
27cb0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
27cc0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
27cd0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
27ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
27cf0 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
27d00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
27d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
27d20 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
27d30 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
27d40 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
27d50 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
27d60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
27d70 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
27d80 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
27d90 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
27da0 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
27db0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
27dc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
27dd0 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
27de0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
27df0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
27e00 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
27e10 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
27e20 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
27e30 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
27e40 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27e50 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
27e60 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
27e70 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
27e80 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
27e90 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
27ea0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
27eb0 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
27ec0 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
27ed0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
27ee0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
27ef0 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
27f00 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
27f10 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
27f20 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
27f30 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27f40 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
27f50 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
27f60 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r.);.int sqlite3
27f70 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
27f80 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
27f90 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
27fa0 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
27fb0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
27fc0 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
27fd0 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
27fe0 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
27ff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
28000 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
28010 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
28020 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
28030 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
28040 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
28050 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28060 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
28070 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c  dChar(StrAccum*,
28080 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20  int,char);.char 
28090 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
280a0 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
280b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
280c0 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
280d0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
280e0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
280f0 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
28100 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
28110 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
28120 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
28130 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
28140 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
28150 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
28160 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
28170 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
28180 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
28190 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
281a0 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
281b0 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
281c0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
281d0 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
281e0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
281f0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
28200 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
28210 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
28220 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
28230 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
28240 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
28250 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
28260 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
28270 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
28280 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
28290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
282a0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
282b0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
282c0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
282d0 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
282e0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
282f0 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
28300 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
28310 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
28320 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
28330 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
28340 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
28350 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
28360 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76  oid*(*)(u64));.v
28370 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
28380 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
28390 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
283a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
283b0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
283c0 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
283d0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
283e0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
283f0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
28400 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
28410 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
28420 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
28430 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
28440 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28450 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
28460 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
28470 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
28480 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
28490 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
284a0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
284b0 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
284c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
284d0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
284e0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
284f0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
28500 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
28510 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
28520 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
28530 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
28540 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
28550 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
28560 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
28570 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
28580 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
28590 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
285a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
285b0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
285c0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
285d0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
285e0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
285f0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
28600 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
28610 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
28620 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
28630 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
28640 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
28650 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
28660 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
28670 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
28680 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
28690 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
286a0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
286b0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
286c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
286d0 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
286e0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
286f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
28700 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
28710 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
28720 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
28730 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
28740 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
28750 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
28760 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
28770 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
28780 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
28790 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
287a0 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
287b0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
287c0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
287d0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
287e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
287f0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
28800 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
28810 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
28820 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
28830 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
28840 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
28850 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28860 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
28870 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
28880 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
28890 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
288a0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
288b0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
288c0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
288d0 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
288e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
288f0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
28900 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
28910 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
28920 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
28930 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
28940 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
28950 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28960 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
28970 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
28980 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
28990 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
289a0 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
289b0 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
289c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
289d0 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
289e0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
289f0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
28a00 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
28a10 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
28a20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
28a30 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
28a40 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
28a50 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
28a60 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
28a70 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
28a80 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
28a90 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
28aa0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28ab0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
28ac0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
28ad0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
28ae0 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
28af0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
28b00 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
28b10 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
28b20 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
28b30 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
28b40 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
28b50 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
28b60 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
28b70 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
28b80 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
28b90 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
28ba0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
28bb0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
28bc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28bd0 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
28be0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
28bf0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
28c00 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
28c10 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
28c20 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
28c30 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
28c40 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
28c50 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
28c60 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
28c70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28c80 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
28c90 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
28ca0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
28cb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28cc0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
28cd0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
28ce0 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
28cf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28d00 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
28d10 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
28d20 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
28d30 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
28d40 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
28d50 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
28d60 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
28d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
28d80 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
28d90 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
28da0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
28db0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
28dc0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
28dd0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
28de0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
28df0 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
28e00 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
28e10 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
28e20 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
28e30 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
28e40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
28e50 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
28e60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
28e70 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
28e80 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
28e90 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
28ea0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
28eb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
28ec0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
28ed0 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
28ee0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
28ef0 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
28f00 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
28f10 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
28f20 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
28f30 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
28f40 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
28f50 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
28f60 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
28f70 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
28f80 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
28f90 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
28fa0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
28fb0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
28fc0 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
28fd0 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
28fe0 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
28ff0 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
29000 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
29010 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
29020 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
29030 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
29040 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
29050 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
29060 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
29070 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
29080 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
29090 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
290a0 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
290b0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
290c0 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
290d0 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
290e0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
290f0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
29100 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
29110 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
29120 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
29130 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
29140 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
29150 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
29160 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
29170 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
29180 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
29190 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
291a0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
291b0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
291c0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
291d0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
291e0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
291f0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
29200 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
29210 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
29220 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
29230 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
29240 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
29250 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
29260 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
29270 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
29280 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
29290 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
292a0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
292b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
292c0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
292d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
292e0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
292f0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
29300 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
29310 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
29320 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29330 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
29340 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  ,d)    0.#endif.
29350 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29360 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
29370 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
29380 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
29390 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
293a0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
293b0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
293c0 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
293d0 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
293e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
293f0 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
29400 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29410 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
29420 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
29430 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
29440 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
29450 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
29460 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
29470 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
29480 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
29490 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
294a0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
294b0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
294c0 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
294d0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
294e0 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
294f0 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
29500 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
29510 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
29520 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
29530 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
29540 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
29550 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
29560 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
29570 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
29580 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
29590 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
295a0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
295b0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
295c0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
295d0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
295e0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
295f0 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
29600 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
29610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
29620 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
29630 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
29640 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
29650 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
29660 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
29670 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
29680 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
29690 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
296a0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
296b0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
296c0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
296d0 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
296e0 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
296f0 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
29700 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
29710 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
29720 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
29730 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
29740 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
29750 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
29760 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
29770 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
29780 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
29790 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
297a0 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
297b0 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
297c0 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
297d0 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
297e0 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
297f0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
29800 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
29810 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
29820 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
29830 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
29840 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
29850 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
29860 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
29870 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
29880 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
29890 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
298a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
298b0 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
298c0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
298d0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
298e0 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
298f0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
29900 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
29910 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a  *, u32, int*);..
29920 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
29930 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
29940 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
29950 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
29960 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
29970 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
29980 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
29990 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
299a0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
299b0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
299c0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
299d0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
299e0 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
299f0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
29a00 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
29a10 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
29a20 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
29a30 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
29a40 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
29a50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29a60 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
29a70 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
29a80 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
29a90 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
29aa0 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
29ab0 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
29ac0 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
29ad0 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
29ae0 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
29af0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
29b00 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
29b10 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
29b20 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
29b30 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
29b40 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
29b50 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
29b60 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
29b70 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
29b80 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
29b90 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
29ba0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
29bb0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
29bc0 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
29bd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
29be0 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
29bf0 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
29c00 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
29c10 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
29c20 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
29c30 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
29c40 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
29c50 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
29c60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
29c70 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
29c80 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
29c90 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
29ca0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
29cb0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
29cc0 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
29cd0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
29ce0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
29cf0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29d00 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
29d10 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
29d20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29d30 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
29d40 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
29d50 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29d60 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
29d70 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
29d80 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
29d90 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
29da0 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
29db0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
29dc0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
29dd0 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
29de0 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
29df0 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
29e00 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
29e10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
29e20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
29e30 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
29e40 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
29e50 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23   messages. .*/.#
29e60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29e70 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
29e80 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
29e90 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
29ea0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
29eb0 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
29ec0 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
29ed0 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
29ee0 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
29ef0 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
29f00 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
29f10 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
29f20 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
29f30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
29f40 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
29f50 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
29f60 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
29f70 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
29f80 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
29f90 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
29fa0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
29fb0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
29fc0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
29fd0 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
29fe0 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
29ff0 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2a000 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2a010 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2a020 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2a030 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2a040 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2a050 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2a060 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2a070 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2a080 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2a090 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2a0a0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2a0b0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2a0c0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2a0d0 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2a0e0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2a0f0 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2a100 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2a110 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2a120 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2a130 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2a140 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2a150 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2a160 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2a170 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2a180 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2a190 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2a1a0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2a1b0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2a1c0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2a1d0 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2a1e0 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2a1f0 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2a200 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2a210 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2a220 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2a230 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2a240 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2a250 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2a260 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2a270 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2a280 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2a290 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2a2a0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2a2b0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2a2c0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2a2d0 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2a2e0 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2a2f0 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2a300 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2a310 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2a320 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2a330 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2a340 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2a350 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2a360 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2a370 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2a380 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2a390 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2a3a0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2a3b0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2a3c0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2a3d0 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2a3e0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2a3f0 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2a400 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2a410 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2a420 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2a430 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2a440 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2a450 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2a460 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
2a470 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
2a480 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
2a490 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
2a4a0 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
2a4b0 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
2a4c0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
2a4d0 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
2a4e0 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
2a4f0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2a500 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
2a510 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
2a520 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
2a530 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2a540 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2a550 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2a560 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2a570 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
2a580 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
2a590 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2a5a0 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
2a5b0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
2a5c0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2a5d0 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
2a5e0 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
2a5f0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2a600 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
2a610 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
2a620 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
2a630 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
2a640 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
2a650 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2a660 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
2a670 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
2a680 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2a690 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
2a6a0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
2a6b0 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
2a6c0 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
2a6d0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2a6e0 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
2a6f0 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
2a700 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
2a710 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
2a720 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
2a730 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
2a740 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
2a750 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
2a760 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
2a770 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
2a780 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
2a790 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2a7a0 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
2a7b0 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
2a7c0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
2a7d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2a7e0 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
2a7f0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2a800 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
2a810 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
2a820 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
2a830 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
2a840 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
2a850 0a                                               .