/ Hex Artifact Content
Login

Artifact 583ec5b50524c5560f92c065962438a7ab0feea9:


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: 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74  eUpdate PreUpdat
7ce0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7cf0: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
7d00: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
7d10: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
7d20: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
7d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d40: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
7d50: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
7d60: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
7d70: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7d80: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
7d90: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
7da0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
7db0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
7dc0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7dd0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
7de0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7df0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
7e00: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
7e10: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
7e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e30: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
7e40: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
7e50: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
7e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e70: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
7e80: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
7e90: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
7ea0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
7eb0: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
7ec0: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
7ed0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
7ee0: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
7ef0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7f00: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
7f10: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
7f20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
7f30: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
7f40: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
7f50: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
7f60: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
7f70: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
7f80: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
7f90: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
7fa0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
7fb0: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
7fc0: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
7fd0: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
7fe0: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
7ff0: 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22  e "u8" and .** "
8000: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
8010: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
8020: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
8030: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
8040: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
8050: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
8060: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
8070: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
8080: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
8090: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
80a0: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
80b0: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23  de "pcache.h"..#
80c0: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
80d0: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
80e0: 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  ".../*.** Each d
80f0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
8100: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
8110: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
8120: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
8130: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
8140: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
8150: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
8160: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
8170: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
8180: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
8190: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
81a0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
81b0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
81c0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
81d0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
81e0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
81f0: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
8200: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
8210: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
8220: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
8230: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
8240: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
8250: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
8260: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
8270: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
8280: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
8290: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
82a0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
82b0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
82c0: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
82d0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
82e0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
82f0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
8300: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
8310: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
8320: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
8330: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
8340: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
8350: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
8360: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
8370: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
8380: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
8390: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
83a0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
83b0: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
83c0: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
83d0: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
83e0: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
83f0: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
8400: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
8410: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
8420: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
8430: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
8440: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
8450: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
8460: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
8470: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
8480: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
8490: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
84a0: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
84b0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
84c0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
84d0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
84e0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
84f0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
8500: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
8510: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
8520: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
8530: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
8540: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
8550: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
8560: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
8570: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
8580: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
8590: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
85a0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
85b0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
85c0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
85d0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
85e0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
85f0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
8600: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
8610: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
8620: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
8630: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
8640: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
8650: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
8660: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
8670: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
8680: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
8690: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
86a0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
86b0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
86c0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
86d0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
86e0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
86f0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
8700: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
8710: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
8720: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
8730: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
8740: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
8750: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
8760: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
8770: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
8780: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
8790: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
87a0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
87b0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
87c0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
87d0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
87e0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
87f0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
8800: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
8810: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
8820: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
8830: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
8840: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
8850: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
8860: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
8870: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
8880: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
8890: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
88b0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
88c0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
88d0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
88e0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
88f0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
8900: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
8910: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
8920: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
8930: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
8940: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
8950: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
8960: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
8970: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
8980: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
8990: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
89a0: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
89b0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
89c0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
89d0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
89e0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
89f0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
8a00: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
8a10: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
8a20: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
8a30: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8a40: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8a50: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
8a60: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
8a70: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
8a80: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8a90: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
8aa0: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
8ab0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
8ac0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
8ad0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
8ae0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
8af0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
8b00: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
8b10: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
8b20: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
8b30: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
8b40: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
8b50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8b60: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
8b70: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
8b80: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
8b90: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
8ba0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
8bb0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
8bc0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
8bd0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
8be0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
8bf0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
8c00: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
8c10: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
8c20: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
8c30: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
8c40: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
8c50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
8c60: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
8c70: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
8c80: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
8c90: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
8ca0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
8cb0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
8cc0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
8cd0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
8ce0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
8cf0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
8d00: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
8d10: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
8d20: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
8d30: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
8d40: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
8d50: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
8d60: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
8d70: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
8d80: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
8d90: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
8da0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8db0: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
8dc0: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
8dd0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
8de0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
8df0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
8e00: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
8e10: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
8e20: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
8e30: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
8e40: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
8e50: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
8e60: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
8e70: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
8e80: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
8e90: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
8ea0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
8eb0: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
8ec0: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
8ed0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
8ee0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
8ef0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
8f00: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
8f10: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
8f20: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
8f30: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
8f40: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
8f50: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
8f60: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
8f70: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
8f80: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
8f90: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
8fa0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
8fb0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
8fc0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
8fd0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
8fe0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
8ff0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
9000: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
9010: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
9020: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
9030: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9040: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
9050: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
9060: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
9070: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
9080: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
9090: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
90a0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
90b0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
90c0: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
90d0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
90e0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
90f0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
9100: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
9110: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9120: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
9130: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
9140: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
9150: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
9160: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
9170: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
9180: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
9190: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
91a0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
91b0: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
91c0: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
91d0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
91e0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
91f0: 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20  ide {.  u16 sz; 
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
9220: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
9230: 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64  */.  u8 bEnabled
9240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9250: 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  False to disable
9260: 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61   new lookaside a
9270: 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  llocations */.  
9280: 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20  u8 bMalloced;   
9290: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
92a0: 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e  if pStart obtain
92b0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
92c0: 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e  malloc() */.  in
92d0: 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20  t nOut;         
92e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
92f0: 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65  of buffers curre
9300: 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74  ntly checked out
9310: 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b   */.  int mxOut;
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9330: 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20   Highwater mark 
9340: 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e  for nOut */.  in
9350: 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  t anStat[3];    
9360: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
9370: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
9380: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
9390: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
93a0: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
93b0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
93c0: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
93d0: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
93e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
93f0: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
9400: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
9410: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
9420: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
9430: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
9440: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
9450: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
9460: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
9470: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
9480: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
9490: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
94a0: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
94b0: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
94c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
94d0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
94e0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a  on definitions..
94f0: 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20  **.** Hash each 
9500: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
9510: 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68  e into one of th
9520: 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b  e FuncDefHash.a[
9530: 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c  ] slots..** Coll
9540: 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68  isions are on th
9550: 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20  e FuncDef.pHash 
9560: 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  chain..*/.struct
9570: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
9580: 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b   FuncDef *a[23];
9590: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
95a0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
95b0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
95c0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
95d0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
95e0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
95f0: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
9600: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
9610: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
9620: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
9630: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
9640: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
9650: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
9660: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
9670: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
9680: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9690: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
96a0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
96b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
96c0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
96d0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
96e0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9700: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
9710: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
9720: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9740: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
9750: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
9760: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
9770: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
9780: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
9790: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
97a0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
97b0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
97c0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
97d0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
97e0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
97f0: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
9800: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
9810: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
9820: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
9830: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
9840: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
9850: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
9860: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
9870: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
9880: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
9890: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
98a0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
98b0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
98c0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
98d0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
98e0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
98f0: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
9900: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
9910: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
9920: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
9930: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
9940: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
9950: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
9960: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
9970: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
9980: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
9990: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
99a0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
99b0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
99c0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
99d0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
99e0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
99f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
9a00: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9a10: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
9a20: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
9a30: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
9a40: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
9a50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9a60: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9a70: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
9a80: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
9a90: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9aa0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9ab0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
9ae0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
9af0: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
9b00: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
9b10: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
9b20: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9b30: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9b40: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9b70: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
9b80: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
9b90: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9ba0: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
9bd0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
9be0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
9bf0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
9c00: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
9c10: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
9c20: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
9c30: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
9c40: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
9c50: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
9c60: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
9c70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9c80: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
9c90: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
9ca0: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
9cb0: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
9cc0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
9cd0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
9ce0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d00: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
9d10: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
9d40: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
9d50: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
9d60: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
9d80: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
9d90: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
9da0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
9db0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9dc0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
9dd0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
9de0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
9df0: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9e10: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
9e20: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
9e30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
9e40: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
9e50: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
9e60: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
9e70: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
9e80: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
9e90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9ea0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
9eb0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
9ec0: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee0: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
9ef0: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
9f00: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
9f10: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
9f20: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9f30: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
9f40: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
9f50: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
9f60: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f80: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
9f90: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
9fa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9fb0: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
9fc0: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
9fd0: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ff0: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
a000: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
a010: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
a020: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
a030: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
a040: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
a050: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
a060: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
a070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a080: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
a090: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
a0a0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
a0b0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
a0c0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
a0d0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
a0e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
a0f0: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
a100: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
a110: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
a120: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
a130: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
a140: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
a150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
a160: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
a170: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
a180: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
a190: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
a1a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
a1b0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
a1c0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
a1d0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20  s a TS */.  int 
a1e0: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
a1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
a200: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
a210: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
a220: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
a230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
a240: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
a250: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
a260: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
a270: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
a280: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
a290: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
a2a0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
a2b0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
a2c0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
a2d0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
a2e0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
a2f0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
a300: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
a310: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
a320: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
a330: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
a340: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
a350: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
a360: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
a370: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
a380: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
a390: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
a3a0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
a3b0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
a3c0: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
a3d0: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
a3f0: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
a400: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
a410: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
a420: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a430: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
a440: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
a450: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
a460: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a480: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
a490: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
a4a0: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
a4b0: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
a4c0: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
a4d0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
a4e0: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
a4f0: 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65  /.    u8 imposte
a500: 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  rTable;         
a510: 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e    /* Building an
a520: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
a530: 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69  */.  } init;.  i
a540: 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20  nt nVdbeActive; 
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a560: 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20  Number of VDBEs 
a570: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
a580: 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  g */.  int nVdbe
a590: 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20  Read;           
a5a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a5b0: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
a5c0: 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  hat read or writ
a5d0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
a5e0: 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  Write;          
a5f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a600: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
a610: 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  hat read and wri
a620: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
a630: 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  eExec;          
a640: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a650: 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
a660: 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f  to VdbeExec() */
a670: 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79  .  int nVDestroy
a680: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a690: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a6a0: 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  tive OP_VDestroy
a6b0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20   operations */. 
a6c0: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
a6f0: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
a700: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
a710: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
a720: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
a730: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
a740: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
a750: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
a760: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
a770: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
a780: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a790: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7b0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a7c0: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
a7d0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a7e0: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
a7f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
a800: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
a810: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
a820: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
a830: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
a840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a850: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
a860: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a870: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a890: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
a8a0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
a8b0: 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a  ) */   .  int (*
a8c0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
a8d0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
a8e0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
a8f0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
a900: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
a910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a920: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
a930: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
a940: 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28  ) */   .  void (
a950: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
a960: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
a970: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
a980: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
a990: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
a9a0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
a9b0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
a9c0: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
a9d0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
a9e0: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
a9f0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
aa00: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
aa10: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
aa20: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
aa30: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
aa40: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
aa50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
aa60: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
aa70: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
aa80: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
aa90: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
aaa0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
aab0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
aac0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
aad0: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
aae0: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
aaf0: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
ab00: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
ab10: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
ab20: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
ab30: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
ab40: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
ab50: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
ab60: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
ab70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ab80: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
ab90: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
aba0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
abb0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
abc0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
abd0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
abe0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
abf0: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
ac00: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
ac10: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
ac20: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
ac30: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
ac40: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
ac50: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
ac60: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
ac70: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
ac80: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
ac90: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
aca0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
acb0: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
acc0: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
acd0: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
ace0: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
acf0: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
ad00: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
ad10: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
ad20: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
ad30: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
ad40: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
ad50: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
ad60: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
ad70: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
ad80: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
ad90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
ada0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
adb0: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
adc0: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
add0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
ade0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
adf0: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
ae00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae10: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
ae20: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
ae30: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
ae40: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
ae50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
ae60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
ae70: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
ae80: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
ae90: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
aea0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
aeb0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
aec0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
aed0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
aee0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
aef0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
af00: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
af10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
af20: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
af30: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
af40: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
af50: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
af60: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
af70: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
af80: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
af90: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
afa0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
afb0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
afc0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
afd0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
afe0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
aff0: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
b000: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
b010: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
b020: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
b030: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
b040: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
b050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
b060: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
b070: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
b080: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
b090: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
b0a0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
b0b0: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
b0c0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
b0d0: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
b0e0: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
b100: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
b110: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
b120: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
b130: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
b140: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
b150: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
b160: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
b170: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
b180: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
b190: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
b1a0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
b1b0: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
b1c0: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
b1d0: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
b1e0: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
b1f0: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
b200: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b210: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
b220: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
b230: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
b240: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
b250: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
b260: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
b270: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
b280: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b290: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
b2a0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
b2b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
b2c0: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
b2d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
b2e0: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
b2f0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
b300: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
b310: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
b320: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
b330: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
b340: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
b350: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
b360: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
b370: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
b380: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
b390: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
b3a0: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
b3b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b3c0: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
b3d0: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
b3e0: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
b3f0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
b400: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
b410: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
b420: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
b430: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
b440: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
b450: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
b460: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
b470: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
b480: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
b490: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
b4a0: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
b4b0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
b4c0: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
b4d0: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
b4e0: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
b4f0: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
b500: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
b510: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
b520: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
b530: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
b540: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
b550: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
b560: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
b570: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
b580: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
b590: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
b5a0: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
b5b0: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
b5c0: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
b5d0: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
b5e0: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
b5f0: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
b600: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
b610: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
b620: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
b630: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
b640: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
b650: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
b660: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b670: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
b680: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
b690: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
b6a0: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
b6b0: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
b6c0: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
b6d0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
b6e0: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
b6f0: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
b700: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
b710: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
b720: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
b730: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
b740: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
b750: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75  TION.  sqlite3_u
b760: 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20  serauth auth;   
b770: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
b780: 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f  hentication info
b790: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  rmation */.#endi
b7a0: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  f.};../*.** A ma
b7b0: 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20  cro to discover 
b7c0: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
b7d0: 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23  a database..*/.#
b7e0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e  define SCHEMA_EN
b7f0: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
b800: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
b810: 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  ).#define ENC(db
b820: 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e  )        ((db)->
b830: 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  enc)../*.** Poss
b840: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
b850: 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67  the sqlite3.flag
b860: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
b870: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
b880: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
b890: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
b8a0: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
b8b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b8c0: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20  E_InternChanges 
b8d0: 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20   0x00000002  /* 
b8e0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
b8f0: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
b900: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b910: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
b920: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55  0x00000004  /* U
b930: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
b940: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
b950: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
b960: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
b970: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
b980: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
b990: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
b9a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
b9b0: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
b9c0: 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f  000010  /* OK to
b9d0: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
b9e0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
b9f0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
ba00: 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20  s   0x00000020  
ba10: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
ba20: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
ba30: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
ba40: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
ba50: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
ba60: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
ba70: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
ba80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
ba90: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
baa0: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
bab0: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
bac0: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baf0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
bb00: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
bb10: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20         /*   the 
bb50: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
bb60: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
bb70: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
bb80: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
bb90: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
bba0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
bbb0: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
bbf0: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
bc00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc10: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30  SqlTrace       0
bc20: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65  x00000200  /* De
bc30: 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73  bug print SQL as
bc40: 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a   it executes */.
bc50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bc60: 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78  dbeListing    0x
bc70: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62  00000400  /* Deb
bc80: 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56  ug listings of V
bc90: 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a  DBE programs */.
bca0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
bcb0: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
bcc0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20  00000800  /* OK 
bcd0: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
bce0: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
bcf0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
bd00: 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31  dopTrace 0x00001
bd10: 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71  000  /* Trace sq
bd20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29  lite3VdbeAddOp()
bd30: 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e   calls */.#defin
bd40: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
bd50: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30  hecks   0x000020
bd60: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
bd70: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
bd80: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
bd90: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
bda0: 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34  committed 0x0004
bdb0: 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72  000  /* For shar
bdc0: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
bdd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bde0: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
bdf0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72  x00008000  /* Cr
be00: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
be10: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
be20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
be30: 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20  _RecoveryMode   
be40: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49  0x00010000  /* I
be50: 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72  gnore schema err
be60: 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ors */.#define S
be70: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
be80: 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20  er   0x00020000 
be90: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
bea0: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
beb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bec0: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
bed0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e  x00040000  /* En
bee0: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
bef0: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
bf00: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
bf10: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30  nKeys    0x00080
bf20: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
bf30: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
bf40: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
bf50: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
bf60: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30  ndex      0x0010
bf70: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
bf80: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
bf90: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bfa0: 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69  ITE_PreferBuilti
bfb0: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
bfc0: 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20  * Preference to 
bfd0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a  built-in funcs *
bfe0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bff0: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
c000: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
c010: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
c020: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
c030: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69  SQLITE_EnableTri
c040: 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30  gger  0x00800000
c050: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
c060: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
c070: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
c080: 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78  eferFKs       0x
c090: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66  01000000  /* Def
c0a0: 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72  er all FK constr
c0b0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
c0c0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
c0d0: 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30  y      0x0200000
c0e0: 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61  0  /* Disable da
c0f0: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a  tabase changes *
c100: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c110: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
c120: 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44  0x04000000  /* D
c130: 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45  ebug EXPLAIN QUE
c140: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69  RY PLAN */.#defi
c150: 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d  ne SQLITE_Vacuum
c160: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30           0x08000
c170: 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  000  /* Currentl
c180: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
c190: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c1a0: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
c1b0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68  x10000000  /* Ch
c1c0: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
c1d0: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
c1e0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
c1f0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
c200: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
c210: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
c220: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
c230: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
c240: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
c250: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
c260: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
c270: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
c280: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
c290: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
c2a0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
c2b0: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
c2c0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
c2d0: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
c2e0: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
c2f0: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
c300: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
c310: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c320: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
c330: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
c340: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
c350: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
c360: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
c370: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
c380: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
c390: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
c3a0: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
c3b0: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
c3c0: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
c3d0: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
c3e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
c3f0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
c400: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
c410: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
c420: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c430: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
c440: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
c450: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
c460: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c470: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
c480: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
c490: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
c4a0: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
c4b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
c4c0: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
c4d0: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
c4e0: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
c4f0: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
c500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
c510: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
c520: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
c530: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
c540: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c550: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
c560: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
c570: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
c580: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
c590: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
c5a0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
c5b0: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
c5c0: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
c5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
c5e0: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
c5f0: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
c600: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
c610: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c620: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
c630: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
c640: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
c650: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
c660: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
c670: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
c680: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
c690: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
c6a0: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
c6b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
c6c0: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
c6d0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
c6e0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
c6f0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
c700: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
c710: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
c720: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
c730: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
c740: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
c750: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
c760: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c770: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
c780: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
c790: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
c7a0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
c7b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
c7c0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
c7d0: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
c7e0: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
c7f0: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
c800: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
c810: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
c820: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
c830: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
c840: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
c850: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
c860: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
c870: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
c880: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
c890: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
c8a0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
c8b0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
c8c0: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
c8d0: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
c8e0: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
c8f0: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
c900: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
c910: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
c920: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
c930: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
c940: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
c950: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
c960: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c970: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
c980: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
c990: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
c9a0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
c9b0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
c9c0: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
c9d0: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
c9e0: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
c9f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ca00: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
ca10: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
ca20: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
ca30: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
ca40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ca50: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
ca60: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
ca70: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
ca80: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
ca90: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
caa0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
cab0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
cac0: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
cad0: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
cae0: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
caf0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
cb00: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
cb10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
cb20: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
cb30: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
cb40: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
cb50: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
cb60: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
cb70: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
cb80: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
cb90: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
cba0: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
cbb0: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
cbc0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
cbd0: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
cbe0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
cbf0: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
cc00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
cc10: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
cc20: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
cc30: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
cc40: 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  16 funcFlags;   
cc50: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
cc60: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
cc70: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
cc80: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
cc90: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
cca0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
ccb0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
ccc0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
ccd0: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
cce0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
ccf0: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
cd00: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
cd10: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
cd20: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
cd30: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
cd40: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
cd50: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
cd60: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
cd70: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
cd80: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
cd90: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
cda0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
cdb0: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
cdc0: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
cdd0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
cde0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
cdf0: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
ce00: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
ce10: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
ce20: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
ce30: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
ce40: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
ce50: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
ce60: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
ce70: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
ce80: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
ce90: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
cea0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
ceb0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
cec0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
ced0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
cee0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
cef0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
cf00: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
cf10: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
cf20: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
cf30: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
cf40: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
cf50: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
cf60: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
cf70: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
cf80: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
cf90: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
cfa0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
cfb0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
cfc0: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
cfd0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
cfe0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
cff0: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
d000: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
d010: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
d020: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
d030: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
d040: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
d050: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
d060: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
d070: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
d080: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
d090: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
d0a0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
d0b0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
d0c0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
d0d0: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
d0e0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
d0f0: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
d100: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
d110: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
d120: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
d130: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
d140: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
d150: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
d160: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
d170: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
d180: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
d190: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
d1a0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
d1b0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
d1c0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
d1d0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
d1e0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
d1f0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
d200: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
d210: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
d220: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
d230: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
d240: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
d250: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
d260: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
d270: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
d280: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
d290: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
d2a0: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
d2b0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
d2c0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
d2d0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
d2e0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
d2f0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
d300: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d310: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
d320: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
d330: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
d340: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
d350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d360: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
d370: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
d380: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
d390: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
d3a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d3b0: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
d3c0: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
d3d0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
d3e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d3f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d400: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
d410: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
d420: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
d430: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d440: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d450: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
d460: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
d470: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
d480: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
d490: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
d4a0: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
d4b0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
d4c0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
d4d0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
d4e0: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
d4f0: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
d500: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
d510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d520: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
d530: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
d540: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
d550: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
d560: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
d570: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
d580: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
d590: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
d5a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d5b0: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
d5c0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
d5d0: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
d5e0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d5f0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
d600: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
d610: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
d620: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
d630: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
d640: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
d650: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
d660: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
d670: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
d680: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d690: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
d6a0: 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
d6b0: 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
d6c0: 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
d6d0: 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
d700: 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
d710: 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
d720: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
d730: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
d740: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
d750: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
d760: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
d770: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
d780: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
d790: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
d7a0: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
d7b0: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
d7c0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d7d0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
d7e0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
d7f0: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
d800: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
d810: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
d820: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69   zName .**     i
d830: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
d840: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
d850: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
d860: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
d870: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
d880: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
d890: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
d8a0: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
d8b0: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
d8c0: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
d8d0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
d8e0: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
d8f0: 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61  on. If .**     a
d900: 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
d910: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
d920: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
d930: 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
d940: 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
d950: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
d960: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
d970: 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
d980: 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
d990: 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
d9a0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
d9b0: 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
d9c0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d9d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d9e0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
d9f0: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
da00: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
da10: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
da20: 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
da30: 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
da40: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
da50: 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
da60: 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
da70: 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
da80: 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
da90: 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
daa0: 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
dab0: 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
dac0: 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
dad0: 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20  e query..**.**  
dae0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
daf0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
db00: 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
db10: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
db20: 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
db30: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
db40: 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
db50: 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
db60: 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
db70: 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
db80: 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
db90: 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
dba0: 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
dbb0: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
dbc0: 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
dbd0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
dbe0: 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
dbf0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
dc00: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
dc10: 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
dc20: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
dc30: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
dc40: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
dc50: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
dc60: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74  ame .**     that
dc70: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
dc80: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
dc90: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
dca0: 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20  call to C .**   
dcb0: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
dcc0: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
dcd0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
dce0: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
dcf0: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
dd00: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
dd10: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
dd20: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
dd30: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
dd40: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
dd50: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
dd60: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
dd70: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
dd80: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
dd90: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
dda0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
ddb0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
ddc0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
ddd0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
dde0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
ddf0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
de00: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
de10: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
de20: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
de30: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
de40: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56   0, 0}.#define V
de50: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
de60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
de70: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
de80: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
de90: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
dea0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
deb0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
dec0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
ded0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
dee0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 44   0, 0}.#define D
def0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
df00: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
df10: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
df20: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
df30: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
df40: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
df50: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
df60: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
df70: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
df80: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
df90: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
dfa0: 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
dfb0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
dfc0: 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
dfd0: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
dfe0: 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
dff0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
e000: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
e010: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
e020: 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
e030: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
e040: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
e050: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
e060: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  , 0}.#define STR
e070: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
e080: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
e090: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
e0a0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
e0b0: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
e0c0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
e0d0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
e0e0: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
e0f0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
e100: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
e110: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
e120: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
e130: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
e140: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e150: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
e160: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
e170: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
e180: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
e190: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
e1a0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
e1b0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
e1c0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
e1d0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
e1e0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
e1f0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
e200: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
e210: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
e220: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
e230: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64  l,#zName,0,0}.#d
e240: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
e250: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
e260: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
e270: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
e280: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
e290: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
e2a0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
e2b0: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
e2c0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
e2d0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
e2e0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
e2f0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
e300: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
e310: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
e320: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
e330: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
e340: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
e350: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
e360: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
e370: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
e380: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
e390: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
e3a0: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
e3b0: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
e3c0: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
e3d0: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
e3e0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
e3f0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
e400: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
e430: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
e440: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
e450: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
e480: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
e490: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
e4a0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e4c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
e4d0: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
e4e0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
e4f0: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
e500: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
e510: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
e520: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
e530: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
e540: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
e550: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
e560: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
e570: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
e580: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
e590: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
e5a0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
e5b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
e5c0: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
e5d0: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
e5e0: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
e5f0: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
e600: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
e610: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
e620: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
e630: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
e640: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
e650: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
e660: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e670: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
e680: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
e690: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
e6a0: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
e6b0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
e6c0: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
e6d0: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
e6e0: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
e6f0: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
e700: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e710: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
e720: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
e730: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
e740: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
e750: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
e780: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
e790: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
e7a0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
e7b0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
e7c0: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
e7d0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e7e0: 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e800: 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
e810: 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
e820: 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
e830: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
e840: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
e850: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
e860: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
e870: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
e880: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
e890: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
e8a0: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
e8b0: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
e8c0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
e8d0: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
e8e0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
e8f0: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
e900: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
e910: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69  Dflt;     /* Ori
e920: 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
e930: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
e940: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65  */.  char *zType
e950: 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79  ;     /* Data ty
e960: 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75  pe for this colu
e970: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
e980: 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
e990: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
e9a0: 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
e9b0: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
e9c0: 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
e9d0: 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
e9e0: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
e9f0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
ea00: 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
ea10: 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
ea20: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
ea30: 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
ea40: 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
ea50: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
ea60: 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
ea70: 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
ea80: 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
ea90: 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
eaa0: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
eab0: 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
eac0: 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
ead0: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
eae0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
eaf0: 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
eb00: 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
eb10: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
eb20: 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
eb30: 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
eb40: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
eb50: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
eb60: 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
eb70: 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
eb80: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
eb90: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  ual table */../*
eba0: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
ebb0: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
ebc0: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
ebd0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ebe0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
ebf0: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
ec00: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
ec10: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
ec20: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
ec30: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
ec40: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
ec50: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
ec60: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
ec70: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
ec80: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
ec90: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
eca0: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
ecb0: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
ecc0: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
ecd0: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
ece0: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
ecf0: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
ed00: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
ed10: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
ed20: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
ed30: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
ed40: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
ed50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ed60: 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
ed70: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ed90: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
eda0: 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
edb0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
edc0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
edd0: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
ede0: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
edf0: 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
ee00: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
ee10: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
ee20: 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
ee30: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
ee40: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
ee50: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
ee60: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
ee70: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
ee80: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
ee90: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
eea0: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
eeb0: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
eec0: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
eed0: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
eee0: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
eef0: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
ef00: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
ef10: 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
ef20: 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
ef30: 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
ef40: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
ef50: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
ef60: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
ef70: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
ef80: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
ef90: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
efa0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
efb0: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
efc0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
efd0: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
efe0: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
eff0: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
f000: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
f010: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
f020: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
f030: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
f040: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
f050: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
f060: 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
f070: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
f080: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
f090: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
f0a0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
f0b0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
f0c0: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
f0d0: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
f0e0: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
f0f0: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
f100: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
f110: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
f120: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
f130: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
f140: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
f150: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
f160: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
f170: 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
f180: 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
f190: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
f1a0: 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
f1b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
f1c0: 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
f1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
f1e0: 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
f1f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
f200: 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
f210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
f220: 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
f230: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
f240: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
f250: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
f260: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
f270: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
f280: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
f290: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
f2a0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
f2b0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
f2c0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
f2d0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
f2e0: 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
f2f0: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
f300: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
f310: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
f320: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
f330: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
f340: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
f350: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
f360: 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
f370: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
f380: 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
f390: 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
f3a0: 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
f3b0: 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
f3c0: 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
f3d0: 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
f3e0: 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
f3f0: 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
f400: 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
f410: 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
f420: 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
f430: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
f440: 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
f450: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f460: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
f470: 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
f480: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f490: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
f4a0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f4b0: 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
f4c0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
f4d0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
f4e0: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
f4f0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
f500: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
f510: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
f520: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
f530: 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
f540: 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
f550: 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
f560: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
f570: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
f580: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
f590: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
f5a0: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
f5b0: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
f5c0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
f5d0: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
f5e0: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
f5f0: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
f600: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
f610: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
f620: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
f630: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f640: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
f650: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
f660: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
f670: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
f680: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f690: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
f6a0: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
f6b0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f6c0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f6d0: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
f6e0: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
f6f0: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
f700: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
f710: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f720: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
f730: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
f740: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f750: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
f760: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
f770: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
f780: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
f790: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
f7a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
f7b0: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
f7c0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
f7d0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
f7e0: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
f7f0: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
f800: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
f810: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
f820: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
f830: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
f840: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
f850: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
f860: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
f870: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
f880: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
f890: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
f8a0: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
f8b0: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
f8c0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
f8d0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
f8e0: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
f8f0: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
f900: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
f910: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
f920: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
f930: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
f940: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
f950: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
f960: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
f970: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
f980: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
f990: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
f9a0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
f9b0: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
f9c0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
f9d0: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
f9e0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
f9f0: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
fa00: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
fa10: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
fa20: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
fa30: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
fa40: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
fa50: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
fa60: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
fa70: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
fa80: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
fa90: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
faa0: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
fab0: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
fac0: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
fad0: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
fae0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
faf0: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
fb00: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
fb10: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
fb20: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
fb30: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
fb40: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
fb50: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
fb60: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
fb70: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
fb80: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
fb90: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
fba0: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
fbb0: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
fbc0: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
fbd0: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
fbe0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
fbf0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
fc00: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
fc10: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
fc20: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
fc30: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
fc40: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
fc50: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
fc60: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
fc70: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
fc80: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
fc90: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
fca0: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
fcb0: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
fcc0: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
fcd0: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
fce0: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
fcf0: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
fd00: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
fd10: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
fd20: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
fd30: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
fd40: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
fd50: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
fd60: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
fd70: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
fd80: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
fd90: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
fda0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
fdb0: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
fdc0: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
fdd0: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
fde0: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
fdf0: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
fe00: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
fe10: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
fe20: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
fe30: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
fe40: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
fe50: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
fe60: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
fe70: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
fe80: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
fe90: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
fea0: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
feb0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
fec0: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
fed0: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
fee0: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
fef0: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
ff00: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
ff10: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
ff20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
ff30: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ff40: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ff50: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
ff60: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
ff70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
ff80: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
ff90: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
ffa0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
ffb0: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
ffc0: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
ffd0: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
ffe0: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
fff0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10000 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
10010 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
10020 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
10030 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
10040 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
10050 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
10060 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
10070 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
10080 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
10090 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
100a0 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
100b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
100c0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
100d0 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
100e0 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
100f0 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
10100 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
10110 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
10120 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
10130 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
10140 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10150 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
10160 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
10170 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
10180 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10190 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
101a0 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
101b0 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
101c0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
101d0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
101e0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
101f0 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
10200 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
10210 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
10220 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
10230 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
10240 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
10250 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
10260 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
10270 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
10280 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
10290 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
102a0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
102b0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
102c0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
102d0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
102e0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
102f0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
10300 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
10310 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
10320 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
10330 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
10360 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
10370 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
10380 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
10390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
103a0 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
103b0 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
103c0 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
103d0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
103e0 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
103f0 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
10400 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
10410 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
10420 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10430 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
10440 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
10450 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
10460 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
10470 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
10480 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
10490 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
104a0 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
104b0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
104c0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
104d0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
104e0 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
104f0 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
10500 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
10510 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
10520 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
10530 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
10540 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
10550 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
10560 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
10570 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
10580 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67  dif.  u8 tabFlag
10590 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
105a0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
105b0 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
105c0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
105d0 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
105e0 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
105f0 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
10600 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
10610 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
10620 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
10630 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
10640 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
10650 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
10660 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
10670 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
10680 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
10690 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
106a0 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
106b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
106c0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
106d0 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
106e0 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
106f0 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
10700 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
10710 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
10720 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
10730 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
10740 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
10750 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
10760 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
10770 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
10780 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
10790 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
107a0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
107b0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
107c0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
107d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
107e0 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
107f0 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
10800 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
10810 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
10820 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
10830 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
10840 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
10850 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
10860 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
10870 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
10880 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
10890 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
108a0 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
108b0 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
108c0 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
108d0 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
108e0 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
108f0 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
10900 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
10910 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
10920 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
10930 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
10940 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
10950 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
10960 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
10970 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
10980 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
10990 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
109a0 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
109b0 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
109c0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
109d0 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
109e0 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
109f0 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
10a00 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
10a10 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
10a20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
10a30 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
10a40 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
10a50 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
10a60 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10a70 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
10a80 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
10a90 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
10aa0 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
10ab0 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
10ac0 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
10ad0 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
10ae0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10af0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
10b00 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
10b10 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
10b20 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
10b30 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
10b40 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
10b50 62 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20  bleRowid  0x40  
10b60 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73    /* No user-vis
10b70 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c  ible "rowid" col
10b80 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  umn */.#define T
10b90 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
10ba0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74    0x80    /* Out
10bb0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
10bc0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a   columns */.../*
10bd0 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
10be0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
10bf0 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
10c00 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
10c10 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
10c20 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
10c30 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
10c40 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
10c50 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
10c60 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
10c70 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
10c80 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
10c90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10ca0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
10cb0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
10cc0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
10cd0 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
10ce0 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
10cf0 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
10d00 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
10d10 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
10d20 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
10d30 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
10d40 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
10d50 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
10d60 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
10d70 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
10d80 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
10d90 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
10da0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
10db0 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
10dc0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
10dd0 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
10de0 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
10df0 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
10e00 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
10e10 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
10e20 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10e30 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
10e40 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
10e50 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
10e60 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
10e70 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
10e80 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
10e90 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
10ea0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
10eb0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
10ec0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
10ed0 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
10ee0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
10ef0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
10f00 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
10f10 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
10f20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
10f30 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
10f40 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
10f50 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
10f60 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
10f70 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
10f80 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10f90 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
10fa0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
10fb0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
10fc0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
10fd0 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
10fe0 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
10ff0 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
11000 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
11010 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
11020 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
11030 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
11040 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
11050 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
11060 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
11070 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
11080 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
11090 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
110a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
110b0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
110c0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
110d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
110e0 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
110f0 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
11100 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
11110 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
11120 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
11130 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
11140 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
11150 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
11160 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
11170 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
11180 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
11190 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
111a0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
111b0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
111c0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
111d0 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
111e0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
111f0 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
11200 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
11210 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
11220 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
11230 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
11240 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
11250 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
11260 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
11270 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
11280 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
11290 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
112a0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
112b0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
112c0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
112d0 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
112e0 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
112f0 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
11300 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11310 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11320 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
11330 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
11340 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
11350 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
11360 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
11370 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
11380 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
11390 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
113a0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
113b0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
113c0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
113d0 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
113e0 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
113f0 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
11400 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
11410 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
11420 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
11430 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
11440 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
11450 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
11460 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
11470 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
11480 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
11490 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
114a0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
114b0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
114c0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
114d0 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
114e0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
114f0 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
11500 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
11510 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
11520 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
11530 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
11540 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11550 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
11560 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
11570 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
11580 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
11590 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
115a0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
115b0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
115c0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
115d0 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
115e0 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
115f0 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
11600 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
11610 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11620 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
11630 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
11640 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
11650 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
11660 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
11670 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
11680 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
11690 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
116a0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
116b0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
116c0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
116d0 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
116e0 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
116f0 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
11700 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
11710 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
11720 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
11730 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
11740 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
11750 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
11760 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
11770 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
11780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
11790 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
117a0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
117b0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
117c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
117d0 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
117e0 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
117f0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
11800 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
11810 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
11820 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
11830 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
11840 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
11850 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
11860 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
11870 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
11880 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
11890 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
118a0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
118b0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
118c0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
118d0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
118e0 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
118f0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
11900 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
11910 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
11920 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
11930 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
11940 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
11950 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
11960 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
11970 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
11980 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
11990 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
119a0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
119b0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
119c0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
119d0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
119e0 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
119f0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
11a00 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
11a10 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
11a20 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
11a30 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
11a40 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
11a50 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
11a60 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
11a70 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
11a80 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
11a90 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
11aa0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
11ab0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
11ac0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
11ad0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
11ae0 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
11af0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
11b00 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
11b10 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
11b20 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
11b30 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
11b40 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
11b50 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
11b60 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
11b70 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
11b80 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
11b90 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
11ba0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
11bb0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
11bc0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
11bd0 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
11be0 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
11bf0 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
11c00 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
11c10 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
11c20 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
11c30 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
11c40 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
11c50 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
11c60 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
11c70 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
11c80 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
11c90 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
11ca0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
11cb0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
11cc0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
11cd0 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
11ce0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
11cf0 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
11d00 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
11d10 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
11d20 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
11d30 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
11d40 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a  reign key..** .*
11d50 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11d60 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
11d70 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
11d80 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
11d90 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
11da0 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
11db0 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
11dc0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
11dd0 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
11de0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
11df0 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
11e00 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
11e10 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
11e20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
11e30 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
11e40 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
11e50 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
11e60 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
11e70 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
11e80 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
11e90 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
11ea0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
11eb0 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
11ec0 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
11ed0 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
11ee0 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
11ef0 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
11f00 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
11f10 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
11f20 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
11f30 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
11f40 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
11f50 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
11f60 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
11f70 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
11f80 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
11f90 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
11fa0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
11fb0 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
11fc0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
11fd0 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
11fe0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
11ff0 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
12000 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
12010 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
12020 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
12030 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
12040 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
12050 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
12060 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
12070 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
12080 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a  _Default  10  /*
12090 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
120a0 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
120b0 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
120c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
120d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
120e0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
120f0 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
12100 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
12110 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
12120 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
12130 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20  control the .** 
12140 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
12150 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
12160 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
12170 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61  t aSortOrder[] a
12180 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20  nd aColl[] have 
12190 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20  nField+1 slots. 
121a0 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46   There.** are nF
121b0 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74  ield slots for t
121c0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  he columns of an
121d0 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20   index then one 
121e0 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f  extra slot.** fo
121f0 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  r the rowid at t
12200 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
12210 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33  t KeyInfo {.  u3
12220 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  2 nRef;         
12230 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
12240 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69  eferences to thi
12250 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  s KeyInfo object
12260 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
12270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
12280 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
12290 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
122a0 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
122b0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
122c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
122d0 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   key columns in 
122e0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
122f0 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20  16 nXField;     
12300 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12310 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74  columns beyond t
12320 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a  he key columns *
12330 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  /.  sqlite3 *db;
12340 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
12350 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12360 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  on */.  u8 *aSor
12370 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
12380 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
12390 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  ch column. */.  
123a0 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
123b0 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
123c0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
123d0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
123e0 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
123f0 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
12400 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68  s a record which
12410 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64   has been parsed
12420 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
12430 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20  dual.** fields, 
12440 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
12450 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70   of doing a comp
12460 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20  arison..**.** A 
12470 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
12480 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
12490 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
124a0 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
124b0 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
124c0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
124d0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
124e0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
124f0 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
12500 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
12510 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
12520 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
12530 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
12540 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
12550 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
12560 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
12570 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
12580 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
12590 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
125a0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  of this object s
125b0 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22  erves as a "key"
125c0 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61   for doing a sea
125d0 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64  rch on.** an ind
125e0 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67  ex b+tree. The g
125f0 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63  oal of the searc
12600 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65  h is to find the
12610 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69   entry that.** i
12620 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20  s closed to the 
12630 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79  key described by
12640 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
12650 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74  his object might
12660 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20   hold.** just a 
12670 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
12680 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
12690 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65  f fields is give
126a0 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f  n by.** pKeyInfo
126b0 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  ->nField..**.** 
126c0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69  The r1 and r2 fi
126d0 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c  elds are the val
126e0 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66  ues to return if
126f0 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73   this key is les
12700 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65  s than.** or gre
12710 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20  ater than a key 
12720 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65  in the btree, re
12730 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12740 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a  se are normally.
12750 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73  ** -1 and +1 res
12760 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d  pectively, but m
12770 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64  ight be inverted
12780 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66   to +1 and -1 if
12790 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69   the b-tree.** i
127a0 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e  s in DESC order.
127b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
127c0 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
127d0 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74  ons actually ret
127e0 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77  urn default_rc w
127f0 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a  hen they find.**
12800 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61   an equals compa
12810 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f  rison.  default_
12820 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c  rc can be -1, 0,
12830 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72   or +1.  If ther
12840 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c  e are.** multipl
12850 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e entries in the
12860 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65   b-tree with the
12870 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20   same key (when 
12880 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20  only looking.** 
12890 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65  at the first pKe
128a0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29  yInfo->nFields,)
128b0 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   then default_rc
128c0 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d   can be set to -
128d0 31 20 74 6f 20 0a 2a 2a 20 63 61 75 73 65 20 74  1 to .** cause t
128e0 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e  he search to fin
128f0 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  d the last match
12900 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65  , or +1 to cause
12910 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a   the search to.*
12920 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74  * find the first
12930 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68   match..**.** Th
12940 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
12950 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
12960 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72  set eqSeen to tr
12970 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a  ue if they ever.
12980 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c  ** get and equal
12990 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f   results when co
129a0 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72  mparing this str
129b0 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72  ucture to a b-tr
129c0 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68  ee record..** Wh
129d0 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30  en default_rc!=0
129e0 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67  , the search mig
129f0 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65  ht end up on the
12a00 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74   record immediat
12a10 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68  ely.** before th
12a20 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72  e first match or
12a30 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
12a40 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  er the last matc
12a50 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65  h.  The.** eqSee
12a60 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64  n field will ind
12a70 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72  icate whether or
12a80 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61   not an exact ma
12a90 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68  tch exists in th
12aa0 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a  e.** b-tree..*/.
12ab0 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
12ac0 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
12ad0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
12ae0 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
12af0 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
12b00 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ation */.  Mem *
12b10 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
12b20 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * Values */.  u1
12b30 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
12b40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
12b50 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
12b60 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
12b70 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
12b80 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
12b90 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
12ba0 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
12bb0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
12bc0 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
12bd0 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
12be0 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
12bf0 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20  ) */.  i8 r1;   
12c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
12c10 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
12c20 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
12c30 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20    i8 r2;        
12c40 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
12c50 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73  o return if (rhs
12c60 20 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20   < lhs) */.  u8 
12c70 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20  eqSeen;         
12c80 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65   /* True if an e
12c90 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73  quality comparis
12ca0 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  on has been seen
12cb0 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
12cc0 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
12cd0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12ce0 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
12cf0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12d00 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12d10 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
12d20 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
12d30 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
12d40 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
12d50 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
12d60 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
12d70 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
12d80 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
12d90 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
12da0 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
12db0 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
12dc0 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
12dd0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
12de0 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
12df0 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
12e00 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
12e10 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
12e20 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
12e30 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
12e40 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
12e50 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
12e60 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
12e70 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
12e80 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
12e90 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
12ea0 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
12eb0 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
12ec0 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
12ed0 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
12ee0 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
12ef0 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
12f00 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
12f10 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
12f20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
12f30 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
12f40 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
12f50 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
12f60 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
12f70 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
12f80 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
12f90 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
12fa0 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
12fb0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
12fc0 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
12fd0 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
12fe0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
12ff0 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
13000 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
13010 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
13020 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
13030 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
13040 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
13050 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
13060 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
13070 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
13080 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
13090 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
130a0 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
130b0 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
130c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
130d0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
130e0 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
130f0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
13100 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
13110 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
13120 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
13130 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
13140 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
13150 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
13160 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
13170 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
13180 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
13190 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
131a0 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
131b0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
131c0 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
131d0 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
131e0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
131f0 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
13200 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
13210 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
13220 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
13230 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
13240 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
13250 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
13260 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
13270 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
13280 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
13290 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
132a0 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
132b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
132c0 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
132d0 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
132e0 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
132f0 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
13300 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
13310 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
13320 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
13330 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
13340 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
13350 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
13360 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
13370 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
13380 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
13390 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
133a0 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
133b0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
133c0 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
133d0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
133e0 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
133f0 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
13400 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
13410 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
13420 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
13430 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
13440 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
13450 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
13460 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
13470 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
13480 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
13490 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
134a0 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
134b0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
134c0 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
134d0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
134e0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
134f0 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
13500 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13510 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
13520 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
13530 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
13540 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
13550 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
13560 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
13570 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
13580 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
13590 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
135a0 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
135b0 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
135c0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
135d0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
135e0 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
135f0 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
13600 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
13610 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
13620 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
13630 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
13640 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
13650 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
13660 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
13670 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
13680 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
13690 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
136a0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
136b0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
136c0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
136d0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
136e0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
136f0 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
13700 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
13710 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13720 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
13730 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
13740 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
13750 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13760 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
13770 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
13780 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
137a0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
137b0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
137c0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
137d0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
137e0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
137f0 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
13800 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
13810 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
13820 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
13830 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
13840 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
13850 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
13860 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
13870 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
13880 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
13890 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
138a0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
138b0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
138c0 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
138d0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
138e0 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
138f0 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
13900 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
13910 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
13920 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
13930 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
13940 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
13950 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
13960 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
13970 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
13980 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  rue */.#ifdef SQ
13990 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
139a0 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74  3_OR_STAT4.  int
139b0 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20   nSample;       
139c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
139d0 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61  of elements in a
139e0 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e  Sample[] */.  in
139f0 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20  t nSampleCol;   
13a00 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
13a10 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e  f IndexSample.an
13a20 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a  Eq[] and so on *
13a30 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76  /.  tRowcnt *aAv
13a40 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gEq;         /* 
13a50 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
13a60 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20  es for keys not 
13a70 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
13a80 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
13a90 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
13aa0 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
13ab0 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52  most key */.  tR
13ac0 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
13ad0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
13ae0 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20  garithmic stat1 
13af0 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e  data for this in
13b00 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  dex */.  tRowcnt
13b10 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20   nRowEst0;      
13b20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
13b30 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72  hmic number of r
13b40 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
13b50 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
13b60 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13b70 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
13b80 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
13b90 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
13ba0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
13bb0 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
13bc0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
13bd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13be0 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
13bf0 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
13c00 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
13c10 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
13c20 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
13c30 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
13c40 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
13c50 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
13c60 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
13c70 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
13c80 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
13c90 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
13ca0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
13cb0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
13cc0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
13cd0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
13ce0 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
13cf0 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
13d00 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
13d10 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
13d20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
13d30 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
13d40 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
13d50 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
13d60 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
13d70 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
13d80 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
13d90 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
13da0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
13db0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
13dc0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
13dd0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
13de0 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
13df0 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
13e00 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
13e10 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
13e20 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
13e30 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
13e40 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
13e50 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
13e60 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
13e70 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
13e80 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
13e90 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
13ea0 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
13eb0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
13ec0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
13ed0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
13ee0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
13ef0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
13f00 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
13f10 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
13f20 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
13f30 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
13f40 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
13f50 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
13f60 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
13f70 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
13f80 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
13f90 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
13fa0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
13fb0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13fc0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
13fd0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
13fe0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13ff0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
14000 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
14010 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
14020 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
14030 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
14040 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
14050 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
14060 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
14070 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
14080 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
14090 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
140a0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
140b0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
140c0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
140d0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
140e0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
140f0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
14100 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
14110 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
14120 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
14130 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
14140 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
14150 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
14160 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
14170 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
14180 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
14190 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
141a0 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
141b0 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
141c0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
141d0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
141e0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
141f0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
14200 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
14210 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
14220 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
14230 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
14240 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
14250 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
14260 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
14270 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
14280 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
14290 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
142a0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
142b0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
142c0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
142d0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
142e0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
142f0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
14300 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
14310 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
14320 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
14330 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
14340 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
14350 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
14360 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
14370 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
14380 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
14390 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
143a0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
143b0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
143c0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
143d0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
143e0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
143f0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
14400 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
14410 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
14420 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
14430 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
14440 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
14450 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
14460 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
14470 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
14480 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
14490 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
144a0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
144b0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
144c0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
144d0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
144e0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
144f0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
14500 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
14530 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
14540 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
14550 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
14560 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
14570 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
14580 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
14590 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
145a0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
145d0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
145e0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
145f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
14600 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
14610 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
14620 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
14630 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
14640 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
14650 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
14660 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
14670 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
14680 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
14690 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
146a0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
146b0 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
146c0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
146d0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
146e0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
146f0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
14700 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
14710 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
14720 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
14730 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
14740 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
14750 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
14760 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
14770 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
14780 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14790 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
147a0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
147c0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
147d0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
147e0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
147f0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
14800 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
14810 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
14820 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
14830 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
14840 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
14850 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
14860 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
14870 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
14880 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
14890 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
148a0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
148b0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
148c0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
148d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
148e0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
148f0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
14900 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
14910 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
14920 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
14930 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
14940 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
14950 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
14960 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14970 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
14980 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
14990 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
149c0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
149d0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
149e0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
14a10 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
14a20 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
14a30 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
14a40 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
14a50 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
14a60 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
14a70 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
14a80 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
14a90 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
14aa0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
14ab0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
14ac0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
14ad0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
14ae0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
14af0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14b00 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
14b10 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
14b20 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
14b30 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
14b40 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14b50 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
14b60 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
14b70 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
14b80 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
14b90 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
14ba0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
14bb0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
14bc0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
14bd0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
14be0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
14bf0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
14c00 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
14c10 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
14c20 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
14c30 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
14c40 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
14c50 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
14c60 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
14c70 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
14c80 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
14c90 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
14ca0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
14cb0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
14cc0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
14cd0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
14ce0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
14cf0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
14d00 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
14d10 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
14d20 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
14d30 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
14d40 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
14d50 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
14d60 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
14d70 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
14d80 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14d90 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
14da0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
14db0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
14dc0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
14dd0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
14de0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
14df0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
14e00 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
14e10 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
14e20 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
14e30 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
14e40 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
14e50 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
14e60 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
14e70 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
14e80 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
14e90 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
14ea0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
14eb0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
14ec0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
14ed0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
14ee0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
14ef0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
14f00 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
14f10 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
14f20 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
14f30 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
14f40 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
14f50 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
14f60 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
14f70 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
14f80 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
14f90 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
14fa0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
14fb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
14fc0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
14fd0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14fe0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
14ff0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
15000 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
15010 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
15020 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
15030 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
15040 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
15050 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
15060 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
15070 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
15080 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
15090 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
150a0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
150b0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
150c0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
150d0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
150e0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
150f0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
15100 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
15110 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
15120 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
15130 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
15140 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
15150 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
15160 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
15170 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
15180 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
15190 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
151a0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
151b0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
151c0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
151d0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
151e0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
151f0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
15200 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
15210 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
15220 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
15230 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
15240 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
15250 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
15260 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
15270 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
15280 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
15290 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
152a0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
152b0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
152c0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
152d0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
152e0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
152f0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
15300 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
15310 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
15320 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
15330 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
15340 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
15350 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
15360 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
15370 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
15380 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
15390 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
153a0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
153b0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
153c0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
153d0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
153e0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
153f0 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
15400 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
15410 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
15420 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
15430 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
15440 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
15450 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
15460 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
15470 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
15480 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
15490 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
154a0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
154b0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
154c0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
154d0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
154e0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
154f0 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
15500 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
15510 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
15520 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
15530 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15540 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
15550 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
15560 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
15570 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
15580 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
15590 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
155a0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
155b0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
155c0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
155d0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
155e0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
155f0 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
15600 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
15610 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
15620 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
15630 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
15640 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
15650 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
15660 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
15670 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
15680 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
15690 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
156a0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
156b0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
156c0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
156d0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
156e0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
156f0 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
15700 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
15710 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
15720 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
15730 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
15740 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
15750 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
15760 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
15770 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
15780 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
15790 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
157a0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
157b0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
157c0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
157d0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
157e0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
157f0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
15800 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
15810 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
15820 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
15830 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
15840 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
15850 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
15860 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
15870 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
15880 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
15890 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
158a0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
158b0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
158c0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
158d0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
158e0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
158f0 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
15900 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
15910 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
15920 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
15930 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
15940 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
15950 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
15960 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
15970 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15980 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
15990 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
159a0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
159b0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
159c0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
159d0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
159e0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
159f0 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
15a00 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
15a10 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
15a20 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
15a30 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
15a40 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
15a50 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
15a60 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
15a70 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
15a80 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
15a90 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
15aa0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
15ab0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
15ac0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
15ad0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
15ae0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
15af0 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
15b20 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
15b30 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
15b40 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
15b50 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
15b60 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
15b70 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
15b80 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
15b90 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
15ba0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
15bb0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
15bc0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
15bd0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
15be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
15bf0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
15c00 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
15c10 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
15c20 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
15c30 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
15c40 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
15c50 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
15c60 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
15c70 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
15c80 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
15c90 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
15ca0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
15cb0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
15cc0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
15cd0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
15ce0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
15cf0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
15d00 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
15d10 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
15d20 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
15d30 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
15d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
15d80 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
15d90 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
15da0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
15db0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
15dc0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
15dd0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
15de0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
15df0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
15e00 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
15e10 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
15e20 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
15e30 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
15e40 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
15e50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
15e60 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
15e70 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
15e80 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
15e90 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
15ea0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
15eb0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
15ec0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
15ed0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
15ee0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15ef0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15f00 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15f10 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15f20 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
15f30 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
15f40 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
15f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
15f90 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
15fa0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
15fb0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
15fc0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
15fd0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
15fe0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
15ff0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
16000 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
16010 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
16020 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
16030 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
16040 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
16070 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
160a0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
160b0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
160e0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
160f0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
16100 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
16110 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
16120 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
16130 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
16140 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
16170 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
16180 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
16190 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
161a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
161b0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
161c0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
161d0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
161e0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
161f0 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
16200 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
16210 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
16220 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
16230 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
16240 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
16250 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
16260 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
16290 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
162a0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
162b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
162c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
162d0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
162e0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
162f0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
16300 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
16310 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
16320 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
16330 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
16340 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
16350 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
16360 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
16370 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
16380 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
16390 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
163a0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
163b0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
163c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
163d0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
163e0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
163f0 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
16400 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
16410 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
16420 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
16430 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
16440 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
16450 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16460 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
16470 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
16480 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
16490 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
164a0 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
164b0 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
164c0 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
164d0 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
164e0 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
164f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
16500 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
16510 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
16520 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
16530 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
16540 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
16550 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
16560 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
16570 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
16580 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
16590 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
165a0 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
165b0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
165c0 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
165d0 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
165e0 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
165f0 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
16600 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
16610 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
16620 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
16630 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
16640 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
16650 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
16660 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
16670 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
16680 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
16690 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
166a0 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
166b0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
166c0 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
166d0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
166e0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
166f0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
16700 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
16710 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
16720 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
16730 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
16740 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
16750 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
16760 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
16770 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
16780 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
16790 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
167a0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
167b0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
167c0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
167d0 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
167e0 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
167f0 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
16800 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
16810 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
16820 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
16830 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
16840 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
16850 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
16860 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
16870 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
16880 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
16890 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
168a0 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
168b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
168c0 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
168d0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
168e0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
168f0 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
16900 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
16910 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
16920 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
16930 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
16940 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
16950 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
16960 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
16970 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
16980 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
16990 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
169a0 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
169b0 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
169c0 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
169d0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
169e0 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
169f0 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
16a00 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
16a10 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
16a20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
16a30 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
16a40 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
16a50 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
16a60 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
16a70 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66   Combinations of
16a80 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f   two or more EP_
16a90 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  * flags.*/.#defi
16aa0 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
16ab0 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
16ac0 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70  ubquery) /* Prop
16ad0 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73  agate these bits
16ae0 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a   up tree */../*.
16af0 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
16b00 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
16b10 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
16b20 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
16b30 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
16b40 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
16b50 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
16b60 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
16b70 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
16b80 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
16b90 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
16ba0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
16bb0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
16bc0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
16bd0 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
16be0 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
16bf0 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
16c00 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
16c10 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
16c20 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
16c30 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
16c40 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
16c50 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
16c60 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
16c70 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
16c80 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
16c90 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
16ca0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
16cb0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
16cc0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
16cd0 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
16ce0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
16cf0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
16d00 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
16d10 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
16d20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
16d30 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
16d40 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
16d50 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
16d60 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
16d70 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
16d80 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
16d90 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
16da0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
16db0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
16dc0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
16dd0 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
16de0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
16df0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
16e00 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
16e10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
16e20 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
16e30 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
16e40 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
16e50 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
16e60 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
16e70 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
16e80 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
16e90 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
16ea0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
16eb0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
16ec0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
16ed0 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
16ee0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
16ef0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
16f00 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
16f10 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
16f20 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
16f30 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
16f40 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
16f50 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
16f60 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
16f70 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
16f80 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
16f90 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
16fa0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
16fb0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
16fc0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
16fd0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
16fe0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
16ff0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
17000 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
17010 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
17020 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
17030 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
17040 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
17050 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
17060 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
17070 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
17080 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
17090 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
170a0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
170b0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
170c0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
170d0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
170e0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
170f0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
17100 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
17110 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
17120 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
17130 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
17140 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
17150 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
17160 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
17170 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
17180 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
17190 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
171a0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
171b0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
171c0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
171d0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
171e0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
171f0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
17200 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
17210 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
17220 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
17230 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
17240 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
17250 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
17260 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
17270 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
17280 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
17290 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
172a0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
172b0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
172c0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
172d0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
172e0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
172f0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
17300 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
17310 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
17320 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
17330 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
17340 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17350 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
17360 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
17370 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
17380 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
17390 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
173a0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
173b0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
173c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
173d0 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
173e0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
173f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
17400 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
17410 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
17420 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
17430 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
17440 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17450 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
17460 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17470 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
17480 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
17490 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
174a0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
174b0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
174c0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
174d0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
174e0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
174f0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
17500 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
17510 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
17520 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
17530 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
17540 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
17550 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
17560 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
17570 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
17580 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
17590 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
175a0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
175b0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
175c0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
175d0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
175e0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
175f0 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
17600 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
17610 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
17620 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
17630 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
17640 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
17650 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
17660 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
17670 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
17680 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
17690 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
176a0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
176b0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
176c0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
176d0 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
176e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
176f0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17700 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
17710 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
17720 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
17730 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
17740 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
17750 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
17760 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
17770 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
17780 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
17790 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
177a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
177b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
177c0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
177d0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
177e0 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
177f0 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
17800 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
17810 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
17820 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
17830 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
17840 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
17850 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17860 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
17870 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
17880 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
17890 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
178a0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
178b0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
178c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
178d0 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
178e0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
178f0 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
17900 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
17910 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
17920 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
17930 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
17940 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
17950 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
17960 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
17970 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
17980 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
17990 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
179a0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
179b0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
179c0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
179d0 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
179e0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
179f0 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
17a00 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
17a10 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
17a20 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
17a30 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
17a40 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
17a50 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
17a60 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
17a70 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
17a80 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
17a90 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
17aa0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
17ab0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
17ac0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
17ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
17ae0 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
17af0 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
17b00 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
17b10 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
17b20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
17b30 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
17b40 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
17b50 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
17b60 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
17b70 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
17b80 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
17b90 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
17ba0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
17bb0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
17bc0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
17bd0 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
17be0 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
17bf0 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
17c00 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
17c10 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
17c20 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
17c30 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
17c40 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
17c50 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
17c60 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
17c70 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
17c80 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
17c90 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
17ca0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
17cb0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
17cc0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
17cd0 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
17ce0 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
17cf0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
17d00 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
17d10 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
17d20 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
17d30 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
17d40 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
17d50 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
17d60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
17d70 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
17d80 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
17d90 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
17da0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
17db0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
17dc0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
17dd0 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
17de0 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
17df0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
17e00 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
17e10 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
17e20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
17e30 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
17e40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
17e50 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
17e60 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
17e70 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
17e80 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
17e90 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
17ea0 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
17eb0 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
17ec0 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
17ed0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
17ee0 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
17ef0 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
17f00 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
17f10 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
17f20 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
17f30 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
17f40 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
17f50 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
17f60 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
17f70 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
17f80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
17f90 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
17fa0 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
17fb0 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
17fc0 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
17fd0 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
17fe0 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
17ff0 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
18000 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
18010 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
18020 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
18030 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
18040 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
18050 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
18060 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
18070 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
18080 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
18090 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
180a0 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
180b0 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
180c0 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
180d0 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
180e0 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
180f0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
18100 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
18110 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
18120 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
18130 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
18140 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
18150 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
18160 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
18170 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
18180 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
18190 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
181a0 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
181b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
181c0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
181d0 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
181e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
181f0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
18200 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
18210 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
18220 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
18230 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
18240 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
18250 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
18260 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
18270 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
18280 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
18290 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
182a0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
182b0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
182c0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
182d0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
182e0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
182f0 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
18300 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
18310 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
18320 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
18330 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
18340 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
18350 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
18360 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
18370 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
18380 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
18390 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
183a0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
183b0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
183c0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
183d0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
183e0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
183f0 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
18400 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
18410 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
18420 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
18430 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
18440 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
18450 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
18460 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
18470 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
18480 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
18490 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
184a0 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
184b0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
184c0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
184d0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
184e0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
184f0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
18500 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
18510 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
18520 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
18530 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
18540 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
18550 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
18560 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
18570 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
18580 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
18590 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
185a0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
185b0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
185c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
185d0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
185e0 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
185f0 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
18600 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
18610 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
18620 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
18630 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
18640 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
18650 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
18660 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
18670 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
18680 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
18690 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20  OMIT_EXPLAIN.   
186a0 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20   u8 iSelectId;  
186b0 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74     /* If pSelect
186c0 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74  !=0, the id of t
186d0 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e  he sub-select in
186e0 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EQP */.#endif. 
186f0 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
18700 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
18710 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
18720 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
18730 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
18740 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
18750 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
18760 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
18770 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
18780 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
18790 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
187a0 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
187b0 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
187c0 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
187d0 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
187e0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
187f0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
18800 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
18810 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
18820 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
18830 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
18840 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
18850 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
18860 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
18870 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
18880 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
18890 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
188a0 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
188b0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
188c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
188d0 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
188e0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
188f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18900 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
18910 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
18920 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
18930 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
18940 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
18950 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
18960 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
18970 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
18980 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
18990 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
189a0 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
189b0 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
189c0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
189d0 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
189e0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
189f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
18a00 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
18a10 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
18a20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
18a30 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
18a40 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
18a50 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
18a60 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
18a70 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
18a80 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
18a90 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
18aa0 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
18ab0 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
18ac0 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
18ad0 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
18ae0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
18af0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
18b00 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
18b10 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
18b20 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
18b30 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
18b40 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
18b50 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
18b60 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
18b70 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
18b80 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
18b90 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
18ba0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
18bb0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
18bc0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
18bd0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18be0 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
18bf0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
18c00 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
18c10 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
18c20 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
18c30 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
18c40 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
18c50 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
18c60 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
18c70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
18c80 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
18c90 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
18ca0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
18cb0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
18cc0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
18cd0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
18ce0 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
18cf0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
18d00 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
18d10 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
18d20 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
18d30 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
18d40 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
18d50 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
18d60 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
18d70 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
18d80 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
18d90 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
18da0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18db0 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
18dc0 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
18dd0 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
18de0 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
18df0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18e00 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20  _NO_AUTOINDEX   
18e10 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61    0x0080 /* Disa
18e20 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69  llow automatic i
18e30 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
18e40 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
18e50 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
18e60 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
18e70 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
18e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18e90 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
18ea0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
18eb0 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
18ec0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
18ed0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
18ee0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
18ef0 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
18f00 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
18f10 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
18f20 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
18f30 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
18f40 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0800 /* Suppor
18f50 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
18f60 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
18f70 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e  ine WHERE_REOPEN
18f80 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30  _IDX       0x100
18f90 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20  0 /* Try to use 
18fa0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a  OP_ReopenIdx */.
18fb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
18fc0 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
18fd0 78 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53  x2000 /* ONEPASS
18fe0 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
18ff0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a  iple rows */../*
19000 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
19010 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
19020 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
19030 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
19040 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
19050 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
19060 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
19070 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
19080 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
19090 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
190a0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
190b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
190c0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
190d0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
190e0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
190f0 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
19100 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
19110 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
19120 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
19130 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
19140 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
19150 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
19160 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
19170 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
19180 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
19190 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
191a0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
191b0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
191c0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
191d0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
191e0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
191f0 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
19200 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
19210 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
19220 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
19230 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
19240 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
19250 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
19260 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
19270 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
19280 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
19290 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
192a0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
192b0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
192c0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
192d0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
192e0 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
192f0 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
19300 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
19310 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
19320 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
19330 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
19340 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
19350 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
19360 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
19370 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
19380 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
19390 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
193a0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
193b0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
193c0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
193d0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
193e0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
193f0 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
19400 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
19410 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
19420 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
19430 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
19440 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
19450 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
19460 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
19470 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
19480 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
19490 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
194a0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
194b0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
194c0 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
194d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
194e0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
194f0 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
19500 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
19510 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
19520 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19530 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
19540 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
19550 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
19560 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
19570 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
19580 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
19590 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
195a0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
195b0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
195c0 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
195d0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
195e0 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
195f0 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
19600 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
19610 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
19620 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
19630 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
19640 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
19650 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
19660 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
19670 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
19680 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
19690 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
196a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
196b0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
196c0 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
196d0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
196e0 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
196f0 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
19700 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
19710 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
19720 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
19730 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
19740 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19750 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
19760 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
19770 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
19780 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
19790 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
197a0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
197b0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
197c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
197d0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
197e0 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
197f0 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
19800 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d  *.** Note:  NC_M
19810 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61  inMaxAgg must ha
19820 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
19830 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67  e as SF_MinMaxAg
19840 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f  g and.** SQLITE_
19850 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20  FUNC_MINMAX..** 
19860 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
19870 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
19880 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
19890 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
198a0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
198b0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
198c0 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20   0x0002  /* One 
198d0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
198e0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
198f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
19900 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
19910 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
19920 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
19930 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
19940 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
19950 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
19960 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
19970 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
19980 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
19990 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
199a0 72 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20  rtIdx   0x0010  
199b0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
199c0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
199d0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
199e0 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72  efine NC_IdxExpr
199f0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72     0x0020  /* Tr
19a00 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
19a10 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54  columns of CREAT
19a20 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
19a30 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
19a40 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
19a50 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
19a60 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
19a70 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ove */../*.** An
19a80 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
19a90 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
19aa0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
19ab0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
19ac0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
19ad0 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
19ae0 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
19af0 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
19b00 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
19b10 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
19b20 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
19b30 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
19b40 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
19b50 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
19b60 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
19b70 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
19b80 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
19b90 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
19ba0 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
19bb0 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
19bc0 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
19bd0 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
19be0 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
19bf0 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
19c00 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
19c10 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
19c20 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
19c30 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
19c40 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
19c50 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
19c60 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
19c70 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
19c80 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
19c90 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
19ca0 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
19cb0 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
19cc0 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
19cd0 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
19ce0 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
19cf0 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
19d00 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
19d10 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
19d20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
19d30 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
19d40 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
19d50 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
19d60 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
19d70 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
19d80 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
19d90 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
19da0 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
19db0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
19dc0 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
19dd0 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
19de0 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
19df0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
19e00 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
19e10 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
19e20 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
19e30 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
19e40 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
19e50 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
19e60 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
19e70 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
19e80 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
19e90 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
19ea0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
19eb0 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
19ec0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
19ed0 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
19ee0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
19ef0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
19f00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
19f10 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
19f20 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
19f30 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
19f40 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20    u16 selFlags; 
19f50 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
19f60 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
19f70 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
19f80 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
19f90 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
19fa0 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
19fb0 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
19fc0 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
19fd0 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
19fe0 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
19ff0 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1a000 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1a010 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1a020 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1a030 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1a040 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1a050 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1a060 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1a070 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
1a080 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1a090 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1a0a0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1a0b0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
1a0c0 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1a0d0 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1a0e0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1a0f0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1a100 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1a110 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1a120 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1a130 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1a140 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1a150 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1a160 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1a170 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1a180 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1a190 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1a1a0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1a1b0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1a1c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1a1d0 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1a1e0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1a1f0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1a200 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1a210 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1a220 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1a230 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1a240 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1a250 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1a260 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1a270 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1a280 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
1a290 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
1a2a0 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
1a2b0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1a2c0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
1a2d0 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1a2e0 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
1a2f0 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
1a300 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
1a310 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
1a320 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1a330 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1a340 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1a350 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1a360 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1a370 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
1a380 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1a390 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
1a3a0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1a3b0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1a3c0 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1a3d0 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
1a3e0 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1a3f0 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1a400 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1a410 64 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  d        0x0004 
1a420 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1a430 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1a440 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1a450 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1a460 20 30 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74   0x0008  /* Cont
1a470 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1a480 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1a490 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1a4a0 65 72 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f  eral   0x0010  /
1a4b0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1a4c0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1a4d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1a4e0 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
1a4f0 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0020  /* sqlite3
1a500 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1a510 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1a520 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1a530 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
1a540 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  40  /* FROM subq
1a550 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1a560 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1a570 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1a580 64 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20  d        0x0080 
1a590 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1a5a0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1a5b0 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1a5c0 73 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  s          0x010
1a5d0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1a5e0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1a5f0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1a600 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1a610 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69     0x0200  /* Si
1a620 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1a630 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1a640 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1a650 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1a660 20 20 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72    0x0400  /* Par
1a670 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1a680 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1a690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1a6a0 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30  aybeConvert    0
1a6b0 78 30 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  x0800  /* Need c
1a6c0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1a6d0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1a6e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1a6f0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
1a700 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
1a710 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1a720 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1a730 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1a740 72 73 69 76 65 20 20 20 20 20 20 20 30 78 32 30  rsive       0x20
1a750 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1a760 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1a770 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1a780 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1a790 72 74 65 64 20 20 20 20 20 20 20 30 78 34 30 30  rted       0x400
1a7a0 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1a7b0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1a7c0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1a7d0 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1a7e0 48 69 64 64 65 6e 20 20 20 30 78 38 30 30 30 20  Hidden   0x8000 
1a7f0 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1a800 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1a810 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  tput */.../*.** 
1a820 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1a830 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1a840 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1a850 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1a860 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1a870 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1a880 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1a890 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1a8a0 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1a8b0 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1a8c0 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1a8d0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1a8e0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1a8f0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1a900 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
1a910 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1a920 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1a930 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1a940 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1a950 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1a960 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1a970 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1a980 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1a990 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1a9a0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1a9b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1a9c0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1a9d0 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1aa00 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1aa10 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1aa20 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1aa30 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1aa40 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1aa70 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1aa80 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1aa90 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1aaa0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1aab0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1aac0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1aad0 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1aae0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1aaf0 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1ab00 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1ab10 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1ab20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1ab30 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1ab40 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1ab50 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1ab60 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1ab70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1ab80 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1abb0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1abc0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1abd0 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1abe0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1abf0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1ac00 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1ac10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ac20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1ac30 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1ac40 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1ac50 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1ac70 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1ac80 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1ac90 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1aca0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1acb0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1acc0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1acd0 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1ace0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1acf0 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1ad00 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1ad10 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1ad20 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1ad30 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1ad40 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1ad50 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1ad60 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1ad70 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1ada0 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1adb0 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1adc0 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1add0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ade0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1adf0 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1ae00 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1ae10 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1ae20 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1ae30 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1ae40 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1ae50 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ae70 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1ae80 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1ae90 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1aea0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1aeb0 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1aec0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1aed0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1aee0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1af00 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1af10 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1af20 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1af50 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1af60 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1af70 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1af80 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1af90 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1afa0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1afb0 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1afc0 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1afd0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1afe0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1b000 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1b010 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1b020 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1b030 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1b050 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1b060 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1b070 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1b080 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1b090 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1b0a0 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1b0b0 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1b0c0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1b0d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1b0e0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1b0f0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1b100 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1b110 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1b120 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1b130 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1b140 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1b170 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1b180 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1b1b0 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1b1c0 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1b1d0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1b1e0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1b1f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1b200 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1b210 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1b220 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1b230 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1b240 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b260 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1b270 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1b280 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1b290 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1b2b0 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1b2c0 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1b2d0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1b2e0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1b2f0 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1b300 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1b310 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1b320 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1b330 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1b340 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1b350 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1b360 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1b370 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b380 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1b390 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1b3a0 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1b3b0 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1b3c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b3d0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1b3e0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1b3f0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1b400 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b410 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1b420 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1b430 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1b450 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1b460 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1b470 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1b480 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b490 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1b4a0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1b4b0 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1b4c0 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1b4d0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1b4e0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1b4f0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1b500 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1b510 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1b520 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1b530 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1b540 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1b550 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1b560 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1b570 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1b580 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1b590 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1b5a0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1b5b0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1b5c0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1b5d0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1b5e0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1b5f0 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1b600 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1b610 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1b620 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1b630 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1b640 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1b650 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1b660 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1b670 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1b680 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1b690 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1b6a0 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1b6b0 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1b6c0 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1b6d0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1b6e0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1b6f0 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1b700 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1b710 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1b720 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1b730 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1b740 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1b750 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1b760 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1b770 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1b780 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1b790 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1b7a0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1b7b0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1b7c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1b7d0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1b7e0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1b7f0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1b800 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1b810 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1b820 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1b830 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1b840 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1b850 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1b860 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1b870 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1b880 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1b890 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1b8a0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1b8b0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1b8c0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1b8d0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1b8e0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1b8f0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1b900 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1b910 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1b920 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1b930 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1b940 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1b950 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1b960 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1b970 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1b980 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1b990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1b9a0 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1b9b0 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1b9c0 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1b9d0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
1b9e0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
1b9f0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1ba00 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1ba10 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1ba20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1ba30 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1ba40 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1ba50 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1ba60 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1ba70 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1ba80 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1ba90 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1baa0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1bab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bac0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1bad0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1bae0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1baf0 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1bb00 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1bb10 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1bb20 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1bb30 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1bb40 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1bb50 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1bb60 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1bb70 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
1bb80 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1bb90 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1bba0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1bbb0 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1bbc0 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1bbd0 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1bbe0 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1bbf0 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1bc00 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1bc10 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1bc20 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1bc30 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1bc40 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1bc50 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1bc60 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1bc70 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
1bc80 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1bc90 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1bca0 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1bcb0 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1bcc0 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1bcd0 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1bce0 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1bcf0 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1bd00 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1bd10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1bd20 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1bd30 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1bd40 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1bd50 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1bd60 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1bd70 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1bd80 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1bd90 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1bda0 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1bdb0 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1bdc0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1bdd0 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1bde0 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1bdf0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1be00 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1be10 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1be20 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1be30 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1be40 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1be50 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1be60 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1be70 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1be80 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1be90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1bea0 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1beb0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1bec0 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1bed0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1bee0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1bef0 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
1bf00 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1bf10 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1bf20 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1bf30 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1bf40 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1bf50 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1bf60 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1bf70 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1bf80 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1bf90 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1bfa0 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1bfb0 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1bfc0 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1bfd0 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1bfe0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1bff0 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1c000 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1c010 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1c020 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1c030 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1c040 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1c050 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1c060 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1c070 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1c080 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1c090 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1c0a0 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1c0b0 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1c0c0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1c0d0 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1c0e0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1c0f0 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1c100 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1c110 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1c120 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1c130 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1c140 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1c150 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1c160 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1c170 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1c180 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1c190 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1c1a0 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1c1b0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
1c1c0 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1c1d0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1c1e0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1c1f0 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1c200 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1c210 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1c220 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1c230 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1c240 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1c250 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1c260 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1c270 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1c280 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1c290 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1c2a0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1c2b0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1c2c0 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1c2d0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1c2e0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1c2f0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1c300 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1c310 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1c320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1c330 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1c340 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1c350 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1c360 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1c370 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1c380 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1c390 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1c3a0 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1c3b0 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1c3c0 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1c3d0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1c3e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1c3f0 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1c400 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1c410 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1c420 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1c430 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1c440 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1c450 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1c460 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1c470 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1c480 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1c490 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1c4a0 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1c4b0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1c4c0 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1c4d0 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1c4e0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1c4f0 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1c500 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1c510 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1c520 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1c530 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1c540 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1c550 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1c560 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1c570 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1c580 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1c590 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1c5a0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1c5b0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1c5c0 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1c5d0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1c5e0 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1c5f0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1c600 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1c610 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1c620 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1c630 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1c640 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1c650 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1c660 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1c670 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1c680 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1c690 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1c6a0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1c6b0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1c6c0 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1c6d0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1c6e0 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1c6f0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1c700 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1c710 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1c720 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1c730 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1c740 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1c750 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1c760 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1c770 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1c780 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1c790 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1c7a0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1c7b0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1c7c0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1c7d0 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1c7e0 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1c7f0 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1c800 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1c810 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1c820 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1c830 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1c840 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1c850 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
1c860 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1c870 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1c880 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1c890 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1c8a0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1c8b0 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1c8c0 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1c8d0 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1c8e0 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1c8f0 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1c900 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1c910 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1c920 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1c930 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1c940 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1c950 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1c960 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1c970 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1c980 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1c990 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1c9a0 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1c9b0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1c9c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1c9d0 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1c9e0 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1c9f0 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1ca00 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1ca10 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1ca20 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1ca30 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1ca40 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1ca50 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1ca60 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1ca70 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1ca80 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1ca90 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1caa0 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1cab0 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1cac0 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1cad0 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1cae0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1caf0 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1cb00 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1cb10 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1cb20 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1cb30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1cb40 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1cb50 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1cb60 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1cb70 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1cb80 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1cb90 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1cba0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1cbb0 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1cbc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1cbd0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1cbe0 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1cbf0 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1cc00 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1cc10 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1cc20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1cc30 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1cc40 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1cc50 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1cc60 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1cc70 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1cc80 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
1cc90 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f  eg[8];     /* Ho
1cca0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1ccb0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1ccc0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  rs */.  int nRan
1ccd0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1cce0 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1ccf0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1cd00 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1cd10 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1cd20 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1cd30 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1cd40 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1cd50 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1cd60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1cd70 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1cd80 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1cd90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cda0 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1cdb0 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1cdc0 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1cdd0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1cde0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cdf0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1ce00 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1ce10 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20  t nSet;         
1ce20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ce30 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  sets used so far
1ce40 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b   */.  int nOnce;
1ce50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ce60 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20  mber of OP_Once 
1ce70 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20  instructions so 
1ce80 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1ce90 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1cea0 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1ceb0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1cec0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1ced0 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1cee0 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1cef0 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1cf00 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1cf10 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1cf20 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1cf30 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1cf40 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1cf50 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1cf60 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
1cf70 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
1cf80 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77  le of an index w
1cf90 68 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62  hose exprs are b
1cfa0 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20  eing coded */.  
1cfb0 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1cfc0 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1cfd0 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1cfe0 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1cff0 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1d000 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1d010 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1d020 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1d030 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1d040 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1d050 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1d060 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d070 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1d080 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1d090 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1d0a0 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1d0b0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
1d0c0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1d0d0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1d0e0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1d0f0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1d100 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1d110 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1d120 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1d130 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1d140 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1d150 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1d160 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1d170 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1d180 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1d190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1d1a0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1d1b0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1d1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1d1d0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1d1e0 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1d1f0 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1d200 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1d210 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1d220 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1d230 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1d240 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1d250 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1d260 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1d270 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1d280 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1d290 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ry */.  ExprList
1d2a0 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
1d2b0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
1d2c0 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
1d2d0 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
1d2e0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1d2f0 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
1d300 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
1d310 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
1d320 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
1d330 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
1d340 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
1d350 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
1d360 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
1d370 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
1d380 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
1d390 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
1d3a0 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
1d3b0 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1d3c0 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
1d3d0 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
1d3e0 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
1d3f0 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
1d400 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1d410 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
1d420 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
1d430 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
1d440 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
1d450 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1d460 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1d470 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
1d480 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
1d490 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
1d4a0 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
1d4b0 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
1d4c0 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
1d4d0 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1d4e0 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20  E_ENABLED.  int 
1d4f0 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  nSelect;        
1d500 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45   /* Number of SE
1d510 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1d520 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  seen */.  int nS
1d530 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f  electIndent;   /
1d540 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64  * How far to ind
1d550 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28  ent SELECTTRACE(
1d560 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  ) output */.#end
1d570 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1d580 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
1d590 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
1d5a0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
1d5b0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
1d5c0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
1d5d0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
1d5e0 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
1d5f0 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
1d600 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
1d610 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
1d620 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
1d630 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
1d640 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
1d650 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
1d660 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e  ters */..  /* In
1d670 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77  formation used w
1d680 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67  hile coding trig
1d690 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f  ger programs. */
1d6a0 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1d6b0 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1d6c0 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1d6d0 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1d6e0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1d6f0 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1d700 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1d710 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1d720 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1d730 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1d740 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1d750 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1d760 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1d770 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
1d780 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1d790 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1d7a0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1d7b0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1d7c0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1d7d0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1d7e0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1d7f0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1d800 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1d810 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1d820 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1d830 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1d840 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1d850 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1d860 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1d870 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1d880 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1d890 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1d8a0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1d8b0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1d8c0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1d8d0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1d8e0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1d8f0 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1d900 0a 20 20 2f 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 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1d950 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1d960 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1d970 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1d980 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1d990 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1d9a0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1d9b0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1d9c0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1d9d0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1d9e0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1d9f0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1da00 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1da10 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1da20 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1da30 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1da40 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1da50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1da60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1da70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1da80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1da90 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e  ******/..  int n
1daa0 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1dab0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1dac0 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1dad0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1dae0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1daf0 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1db00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1db10 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1db20 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1db30 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1db40 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1db50 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1db60 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1db70 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1db80 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1db90 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1dba0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1dbb0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1dbc0 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1dbd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1dbe0 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1dbf0 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1dc00 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1dc10 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1dc20 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1dc30 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1dc40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1dc50 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1dc60 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1dc70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1dc80 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1dc90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dca0 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1dcb0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1dcc0 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dce0 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1dcf0 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1dd00 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1dd10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1dd20 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1dd30 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1dd40 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1dd50 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1dd60 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1dd70 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1dd80 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1dd90 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1dda0 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1ddb0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1ddc0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1ddd0 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1dde0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1ddf0 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1de00 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1de10 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1de20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1de30 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1de40 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1de50 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1de60 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1de70 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1de80 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1de90 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1dea0 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1deb0 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1dec0 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1ded0 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1dee0 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1def0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1df00 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1df10 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1df20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1df30 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1df40 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1df50 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1df60 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1df70 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1df80 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1df90 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1dfa0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1dfb0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1dfc0 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1dfd0 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1dfe0 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1dff0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1e000 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1e010 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e020 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1e030 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e050 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1e060 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1e070 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1e080 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1e090 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1e0a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1e0b0 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1e0c0 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1e0d0 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1e0e0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1e0f0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1e100 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1e110 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1e120 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1e130 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1e140 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1e150 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1e160 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1e170 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1e180 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1e190 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
1e1a0 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
1e1b0 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
1e1c0 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
1e1d0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1e1e0 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
1e1f0 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1e200 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1e210 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1e220 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1e230 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1e240 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1e250 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1e260 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1e270 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1e280 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1e290 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1e2a0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1e2b0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1e2c0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1e2d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1e2e0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1e2f0 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1e300 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1e310 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1e320 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1e330 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1e340 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1e350 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1e360 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1e370 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1e380 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1e390 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1e3a0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1e3b0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1e3c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1e3d0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1e3e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1e3f0 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1e400 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1e410 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
1e420 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
1e430 61 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50  alues for ISNOOP
1e440 20 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20 61   and LENGTHARG a
1e450 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42 75  re the same.  Bu
1e460 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62  t as .** those b
1e470 69 74 73 20 61 72 65 20 6e 65 76 65 72 20 75 73  its are never us
1e480 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f  ed on the same o
1e490 70 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72 6c  pcode, the overl
1e4a0 61 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a  ap is harmless..
1e4b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e4c0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1e4d0 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1e4e0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1e4f0 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1e500 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1e510 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1e520 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1e530 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1e540 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1e550 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1e560 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1e570 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1e580 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1e590 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1e5a0 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1e5b0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1e5c0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1e5d0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1e5e0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1e5f0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1e600 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1e610 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1e620 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e630 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1e640 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1e650 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1e660 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1e670 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e680 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
1e690 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
1e6a0 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
1e6b0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
1e6c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1e6d0 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
1e6e0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1e6f0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1e700 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
1e710 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
1e720 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
1e730 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1e740 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
1e750 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
1e760 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1e770 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1e780 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
1e790 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
1e7a0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
1e7b0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
1e7c0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
1e7d0 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
1e7e0 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
1e7f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1e800 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
1e810 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
1e820 70 65 6e 20 69 73 20 6f 70 65 6e 69 6e 67 20 66  pen is opening f
1e830 6f 72 2d 64 65 6c 65 74 65 20 63 73 72 20 2a 2f  or-delete csr */
1e840 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e850 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1e860 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
1e870 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1e880 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1e890 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e8a0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1e8b0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1e8c0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1e8d0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1e8e0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1e8f0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1e900 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1e910 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1e920 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1e930 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1e940 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1e950 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1e960 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1e970 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1e980 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1e990 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1e9a0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1e9b0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1e9c0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1e9d0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1e9e0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1e9f0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1ea00 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1ea10 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1ea20 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1ea30 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1ea40 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1ea50 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1ea60 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1ea70 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1ea80 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1ea90 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1eaa0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1eab0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1eac0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1ead0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1eae0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1eaf0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1eb00 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1eb10 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1eb20 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1eb30 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1eb40 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1eb50 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1eb60 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1eb70 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1eb80 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1eb90 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1eba0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1ebb0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1ebc0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1ebd0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1ebe0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1ec10 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1ec20 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1ec30 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1ec40 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1ec50 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ec70 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1ec80 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1ec90 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1eca0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1ecc0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1ecd0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1ece0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1ecf0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1ed00 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1ed10 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1ed20 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1ed30 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1ed40 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1ed50 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1ed60 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1ed70 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1ed80 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1edb0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1edc0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1edd0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1ede0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1edf0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1ee00 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1ee10 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1ee20 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1ee30 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1ee40 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1ee50 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1ee60 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1ee70 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1ee80 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1ee90 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1eea0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1eeb0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1eec0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1eed0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1eee0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1eef0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1ef00 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1ef10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1ef20 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1ef30 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1ef40 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1ef50 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1ef60 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1ef70 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1ef80 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1ef90 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1efa0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1efb0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1efc0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1efd0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1efe0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1eff0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1f000 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1f010 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1f020 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1f030 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1f040 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1f050 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1f060 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1f070 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1f080 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1f090 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1f0a0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1f0b0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1f0c0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1f0d0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1f0e0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1f0f0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1f100 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1f110 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1f120 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1f130 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1f140 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1f150 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1f160 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1f170 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1f180 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1f190 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1f1a0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1f1b0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1f1c0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1f1d0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1f1e0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1f1f0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1f200 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1f210 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1f220 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1f230 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1f240 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1f250 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1f260 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1f270 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1f280 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1f290 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1f2a0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1f2b0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1f2c0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1f2d0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1f2e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1f2f0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1f300 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1f310 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1f320 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1f330 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1f340 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1f350 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
1f360 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
1f370 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
1f380 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1f390 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
1f3a0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1f3b0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1f3c0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
1f3d0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
1f3e0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
1f3f0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
1f400 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1f410 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1f420 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
1f430 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
1f440 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f450 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
1f460 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
1f470 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
1f480 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
1f490 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
1f4a0 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
1f4b0 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61  K_DELETE). * zTa
1f4c0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
1f4d0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1f4e0 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1f4f0 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1f500 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1f510 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1f520 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1f530 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1f540 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1f550 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1f560 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1f570 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
1f580 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1f590 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1f5a0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1f5b0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1f5c0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1f5d0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
1f5e0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1f5f0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1f600 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f610 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1f620 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1f630 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
1f640 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
1f650 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
1f660 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f680 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
1f690 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
1f6a0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
1f6b0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
1f6c0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
1f6d0 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
1f6e0 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1f6f0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1f700 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1f710 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1f720 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1f730 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1f740 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1f750 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1f760 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
1f770 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
1f780 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
1f790 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
1f7a0 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
1f7b0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1f7c0 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
1f7d0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
1f7e0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
1f7f0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1f800 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
1f810 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1f820 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1f830 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1f840 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1f850 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1f860 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1f870 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1f880 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1f890 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1f8a0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1f8b0 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1f8c0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1f8d0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1f8e0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1f8f0 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1f900 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1f910 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1f920 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1f930 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1f940 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1f950 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1f960 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1f970 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1f980 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1f990 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1f9a0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1f9b0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1f9c0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1f9d0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1f9e0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1f9f0 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1fa00 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1fa10 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1fa20 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1fa30 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1fa40 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1fa50 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1fa60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1fa70 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1fa80 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1fa90 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1faa0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1fab0 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1fac0 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1fad0 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1fae0 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1faf0 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1fb00 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1fb10 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1fb20 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1fb30 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1fb40 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1fb50 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1fb60 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1fb70 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1fb80 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1fb90 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1fba0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1fbb0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1fbc0 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1fbd0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1fbe0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1fbf0 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1fc00 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1fc10 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1fc20 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1fc30 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1fc40 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1fc50 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1fc60 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1fc70 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1fc80 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1fc90 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1fca0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1fcb0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1fcc0 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1fcd0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1fce0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1fcf0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1fd00 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1fd10 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1fd20 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1fd30 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1fd40 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1fd50 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1fd60 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1fd70 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1fd80 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1fd90 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1fda0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1fdb0 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1fdc0 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1fdd0 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1fde0 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1fdf0 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1fe00 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
1fe10 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
1fe20 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61  sage */.  u8   a
1fe30 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1fe40 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1fe50 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1fe60 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 62 4d  BIG */.  u8   bM
1fe70 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 2f 2a  alloced;      /*
1fe80 20 7a 54 65 78 74 20 70 6f 69 6e 74 73 20 74 6f   zText points to
1fe90 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
1fea0 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
1feb0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
1fec0 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
1fed0 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a  UM_TOOBIG  2../*
1fee0 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1fef0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1ff00 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1ff10 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1ff20 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1ff30 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1ff40 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1ff50 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1ff60 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1ff70 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1ff80 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1ff90 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1ffa0 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1ffb0 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1ffc0 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1ffd0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1ffe0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1fff0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
20000 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
20010 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
20020 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
20030 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
20040 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
20050 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
20060 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
20070 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
20080 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
20090 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
200a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
200b0 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
200c0 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
200d0 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
200e0 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
200f0 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
20100 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
20110 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
20120 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
20150 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
20160 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
20170 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
20180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20190 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
201a0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
201b0 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
201e0 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
201f0 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
20200 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
20210 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20220 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
20230 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
20240 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
20270 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
20280 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
20290 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
202c0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
202d0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
202e0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
202f0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
20300 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
20310 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
20320 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20340 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
20350 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
20360 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
20370 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20380 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20390 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
203a0 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
203b0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
203c0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
203d0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
203e0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
203f0 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
20400 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20410 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
20420 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
20430 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
20440 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
20450 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
20460 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
20470 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
20480 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
20490 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
204a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
204b0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
204c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204e0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
204f0 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
20500 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
20510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20520 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
20530 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
20540 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
20550 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
20560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
20570 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
20580 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
20590 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
205a0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
205b0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
205c0 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
205d0 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
205e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
205f0 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
20600 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
20610 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20630 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
20640 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
20650 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20680 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
20690 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
206a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
206b0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
206c0 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
206d0 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206f0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
20700 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
20710 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
20720 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20740 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
20750 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
20760 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20780 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
20790 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
207a0 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
207b0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
207c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
207d0 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
207e0 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
207f0 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20810 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
20820 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
20830 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
20840 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
20850 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
20860 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
20870 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
20880 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
20890 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
208a0 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
208b0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
208c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
208d0 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
208e0 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
208f0 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
20900 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20920 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
20930 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
20940 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
20950 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20970 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
20980 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
20990 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
209a0 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
209b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
209c0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
209d0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
209e0 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
209f0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
20a00 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20a10 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
20a20 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
20a30 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
20a60 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
20a70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
20a80 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
20a90 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
20aa0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
20ab0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
20ac0 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
20ad0 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
20ae0 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
20af0 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
20b00 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
20b10 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
20b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
20b30 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
20b40 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
20b50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
20b60 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
20b70 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
20b80 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
20b90 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
20ba0 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
20bb0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
20bc0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
20bd0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
20be0 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
20bf0 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
20c00 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
20c10 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
20c20 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
20c30 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
20c40 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
20c50 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
20c60 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
20c70 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
20c80 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
20c90 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
20ca0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
20cb0 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
20cc0 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
20cf0 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
20d00 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
20d10 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
20d20 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78  N_TEST.  int (*x
20d30 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
20d40 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
20d50 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
20d60 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
20d70 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
20d80 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
20d90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20da0 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
20db0 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b  me() calls */.};
20dc0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
20dd0 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
20de0 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
20df0 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
20e00 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
20e10 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
20e20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
20e30 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
20e40 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
20e50 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
20e60 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
20e70 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
20e80 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
20e90 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
20ea0 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
20eb0 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
20ec0 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
20ed0 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
20ee0 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
20ef0 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
20f00 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
20f10 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
20f20 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
20f30 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
20f40 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
20f50 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
20f60 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
20f70 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
20f80 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
20f90 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
20fa0 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
20fb0 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
20fc0 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
20fd0 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
20fe0 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
20ff0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
21000 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
21010 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
21020 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
21030 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
21040 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
21050 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
21060 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
21070 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
21080 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
21090 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
210a0 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
210b0 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
210c0 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
210d0 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
210e0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
210f0 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
21100 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
21110 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
21120 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
21130 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
21140 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
21150 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
21160 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
21190 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
211a0 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
211b0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
211d0 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
211e0 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
211f0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
21220 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
21230 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21260 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
21270 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
21280 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
21290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
212a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
212b0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
212c0 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
212f0 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
21300 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21330 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
21340 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
21350 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21370 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
21380 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
21390 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
213a0 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
213b0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
213c0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
213d0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
213e0 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
213f0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
21400 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
21410 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
21420 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
21430 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
21440 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
21450 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
21460 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
21470 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
21480 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
21490 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
214a0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
214b0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
214c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
214d0 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
214e0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
214f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
21500 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
21510 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
21520 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
21530 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
21540 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  xpr*);../*.** Re
21550 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
21560 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
21570 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
21580 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
21590 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
215a0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
215b0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
215c0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
215d0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
215e0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
215f0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
21600 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
21610 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
21620 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
21630 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
21640 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
21650 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
21660 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
21670 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
21680 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
21690 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
216a0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
216b0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
216c0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
216d0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
216e0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
216f0 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
21700 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
21710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21720 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
21730 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
21740 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
21750 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
21760 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
21770 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
21780 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
21790 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
217a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
217b0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
217c0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
217d0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
217e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
217f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21800 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
21810 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
21820 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
21830 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
21840 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
21850 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
21860 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
21870 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
21880 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
21890 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
218a0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
218b0 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
218c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
218d0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
218e0 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
218f0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
21900 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
21910 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
21920 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
21930 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
21940 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
21950 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
21960 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
21970 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
21980 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
21990 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
219a0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
219b0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
219c0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
219d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
219e0 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
219f0 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
21a00 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
21a10 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
21a20 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
21a30 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
21a40 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
21a50 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
21a60 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
21a70 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
21a80 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
21a90 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
21aa0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
21ab0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
21ac0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
21ad0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
21ae0 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
21af0 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
21b00 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
21b10 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
21b40 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b60 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
21b70 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
21b80 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
21b90 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
21ba0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
21be0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
21bf0 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
21c00 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
21c10 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
21c20 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
21c30 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
21c40 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
21c50 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
21c60 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
21c70 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
21c80 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
21c90 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
21ca0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
21cb0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
21cc0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
21cd0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
21ce0 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
21cf0 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
21d00 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
21d10 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
21d20 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
21d30 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
21d40 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
21d50 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
21d60 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
21d70 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
21d80 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
21d90 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
21da0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
21db0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21dc0 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
21dd0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
21de0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
21df0 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
21e00 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
21e10 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
21e20 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  E__).../*.** FTS
21e30 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
21e40 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
21e50 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
21e60 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
21e70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
21e80 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
21e90 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
21ea0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
21eb0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
21ec0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
21ed0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
21ee0 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
21ef0 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
21f00 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21f10 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
21f20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21f30 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
21f40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
21f50 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
21f60 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
21f70 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
21f80 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
21f90 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
21fa0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
21fb0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
21fc0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
21fd0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
21fe0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
21ff0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
22000 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
22010 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
22020 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
22030 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
22040 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
22050 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
22060 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
22070 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
22080 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
22090 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
220a0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
220b0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
220c0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
220d0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
220e0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
220f0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
22100 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
22110 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
22120 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
22130 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
22140 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22150 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
22160 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
22170 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
22180 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
22190 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
221a0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
221b0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
221c0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
221d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
221e0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
221f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
22200 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
22210 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
22220 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
22230 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
22240 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
22250 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
22260 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
22270 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
22280 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
22290 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
222a0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
222b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
222c0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
222d0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
222e0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
222f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
22300 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
22310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
22320 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
22330 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
22340 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22350 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
22360 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
22370 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
22380 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22390 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
223a0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
223b0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
223c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
223d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
223e0 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
223f0 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
22400 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
22410 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
22420 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
22430 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
22440 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22450 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
22460 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
22470 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22480 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
22490 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
224a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
224b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
224c0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
224d0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
224e0 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
224f0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
22500 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
22510 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
22520 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
22530 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
22540 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
22550 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
22560 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
22570 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
22580 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
22590 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
225a0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
225b0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
225c0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
225d0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
225e0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
225f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
22600 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
22610 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
22620 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
22630 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
22640 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
22650 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
22660 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
22670 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
22680 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
22690 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
226a0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
226b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
226c0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
226d0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
226e0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
226f0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
22700 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
22710 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
22720 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
22730 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
22740 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
22750 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
22760 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
22770 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
22780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
22790 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
227a0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
227b0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
227c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
227d0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
227e0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
227f0 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
22800 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
22810 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
22820 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
22830 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
22840 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
22850 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
22860 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
22870 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
22880 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
22890 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
228a0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
228b0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
228c0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
228d0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
228e0 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
228f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
22900 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
22910 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
22920 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
22930 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
22940 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
22950 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
22960 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
22970 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
22980 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
22990 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
229a0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
229b0 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
229c0 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
229d0 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
229e0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
229f0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
22a00 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
22a10 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
22a20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
22a30 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
22a40 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
22a50 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
22a60 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
22a70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22a80 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
22a90 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
22aa0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22ab0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
22ac0 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
22ad0 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
22ae0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
22af0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
22b00 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
22b10 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
22b20 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
22b30 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
22b40 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
22b50 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
22b60 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
22b70 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
22b80 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
22b90 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
22ba0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
22bb0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
22bc0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
22bd0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
22be0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
22bf0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
22c00 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
22c10 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
22c20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
22c30 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
22c40 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
22c50 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
22c60 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
22c70 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
22c80 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
22c90 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
22ca0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
22cb0 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
22cc0 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
22cd0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
22ce0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
22cf0 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
22d00 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
22d10 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
22d20 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
22d30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
22d40 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
22d50 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
22d60 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
22d70 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
22d80 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
22d90 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22da0 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29  LITE_MUTEX_NOOP)
22db0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
22dc0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69  emoryBarrier(voi
22dd0 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  d);.#else.# defi
22de0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  ne sqlite3Memory
22df0 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66  Barrier().#endif
22e00 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ..sqlite3_int64 
22e10 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
22e20 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
22e30 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e  lite3StatusUp(in
22e40 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22e50 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28  lite3StatusDown(
22e60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22e70 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67  sqlite3StatusHig
22e80 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29  hwater(int, int)
22e90 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
22ea0 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
22eb0 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
22ec0 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
22ed0 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
22ee0 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
22ef0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
22f00 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
22f10 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20  void);..#ifndef 
22f20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
22f30 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
22f40 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
22f50 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
22f60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
22f70 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
22f80 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
22f90 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
22fa0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
22fb0 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
22fc0 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
22fd0 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
22fe0 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
22ff0 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
23000 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
23010 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
23020 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
23030 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
23040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
23050 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
23060 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
23070 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
23080 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23090 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
230a0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
230b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
230c0 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
230d0 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
230e0 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  };..#define SQLI
230f0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
23100 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20  AL 0x01.#define 
23110 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
23120 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64  LFUNC  0x02.void
23130 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
23140 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
23150 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
23160 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
23170 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
23180 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
23190 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
231a0 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
231b0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
231c0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
231d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
231e0 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
231f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
23200 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ist);.#if define
23210 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
23220 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
23230 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
23240 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
23250 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
23260 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
23270 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
23280 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
23290 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
232a0 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
232b0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
232c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
232d0 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
232e0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
232f0 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
23300 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
23310 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23320 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
23330 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
23340 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
23350 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23360 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
23370 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
23380 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
23390 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
233a0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
233b0 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
233c0 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
233d0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
233e0 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
233f0 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
23400 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
23410 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23420 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
23430 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
23440 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  .);.int sqlite3D
23450 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69  equote(char*);.i
23460 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
23470 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
23480 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
23490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
234a0 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
234b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
234c0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
234d0 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
234e0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
234f0 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
23500 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23510 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
23520 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
23530 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
23540 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
23550 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23560 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
23570 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
23580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
23590 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
235a0 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
235b0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
235c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
235d0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
235e0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
235f0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
23600 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23610 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
23620 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
23630 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
23640 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
23650 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
23660 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
23670 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
23680 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
23690 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
236a0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
236b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
236c0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
236d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
236e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
236f0 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
23700 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
23710 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23720 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
23730 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
23740 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
23750 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
23760 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
23770 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
23780 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
23790 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c  tSortOrder(ExprL
237a0 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ist*,int);.void 
237b0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
237c0 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
237d0 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
237e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
237f0 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
23800 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
23810 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
23820 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
23830 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
23840 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
23850 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
23860 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
23870 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23880 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
23890 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
238a0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
238b0 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
238c0 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
238d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
238e0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
238f0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
23900 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23910 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
23920 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
23930 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
23940 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
23950 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
23960 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23970 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
23980 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
23990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
239a0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
239b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
239c0 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
239d0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
239e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
239f0 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
23a00 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
23a10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
23a20 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
23a30 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
23a40 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
23a50 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
23a60 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
23a70 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
23a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
23a90 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
23aa0 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
23ab0 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
23ac0 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
23ad0 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
23ae0 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
23af0 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
23b00 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
23b10 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
23b20 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
23b30 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51  int,int);.#if SQ
23b40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
23b50 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69  EN_COLUMNS.  voi
23b60 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  d sqlite3ColumnP
23b70 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
23b80 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e  e(Table*, Column
23b90 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
23ba0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  ne sqlite3Column
23bb0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
23bc0 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70  me(T,C) /* no-op
23bd0 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20   */.#endif.void 
23be0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
23bf0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
23c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
23c10 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
23c20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23c30 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
23c40 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
23c50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23c70 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
23c80 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
23c90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
23ca0 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
23cb0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
23cc0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
23cd0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
23ce0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
23cf0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
23d00 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
23d10 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
23d20 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
23d30 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23d40 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
23d50 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
23d60 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
23d70 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
23d80 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
23da0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
23db0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
23dc0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
23dd0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
23de0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
23df0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
23e00 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
23e10 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
23e20 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
23e30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
23e40 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
23e50 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
23e60 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
23e70 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
23e80 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
23e90 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
23ea0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
23eb0 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
23ec0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
23ed0 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c  BitvecTestNotNul
23ee0 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  l(Bitvec*, u32);
23ef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
23f00 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
23f10 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
23f20 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
23f30 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
23f40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23f50 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
23f60 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
23f70 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
23f80 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  vec*);.#ifndef S
23f90 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
23fa0 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  IN_TEST.int sqli
23fb0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
23fc0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
23fd0 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
23fe0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
23ff0 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
24000 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
24010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
24020 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
24030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24040 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
24050 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
24060 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
24070 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
24080 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
24090 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
240a0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
240b0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
240c0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
240d0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
240e0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
240f0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
24100 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
24110 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
24120 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
24130 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24140 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
24150 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
24160 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
24170 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
24180 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24190 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
241a0 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
241b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
241c0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
241d0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
241e0 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
241f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24200 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
24210 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
24220 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24230 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
24240 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
24250 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
24260 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
24270 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
24280 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
24290 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
242a0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
242b0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
242c0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
242d0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
242e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
242f0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
24300 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
24310 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24320 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
24330 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
24340 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
24350 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
24360 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
24370 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
24380 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
24390 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
243a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
243b0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
243c0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
243d0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
243e0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
243f0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
24400 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
24410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
24420 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
24430 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24440 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
24450 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
24460 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
24470 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
24480 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
24490 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
244a0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
244b0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
244c0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
244d0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
244e0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
244f0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
24500 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24530 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
24540 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
24550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
24560 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
24570 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
24580 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
24590 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
245a0 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
245b0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
245c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
245d0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
245e0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
245f0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
24600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
24610 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
24620 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
24630 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
24640 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
24650 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
24660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
24670 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
24680 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
24690 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
246a0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
246b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
246c0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
246d0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
246e0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
246f0 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
24700 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
24710 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
24720 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
24730 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
24740 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
24770 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24780 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
24790 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
247a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
247b0 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
247c0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
247d0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
247e0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
247f0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
24800 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
24810 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
24840 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
24850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
24860 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
24870 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
24880 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
24890 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
248a0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
248b0 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
248c0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
248d0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
248e0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
248f0 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
24900 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
24910 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
24920 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
24930 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
24940 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
24950 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24960 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
24970 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
24980 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
24990 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
249a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
249b0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
249c0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
249d0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
249e0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
249f0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
24a00 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
24a10 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
24a20 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
24a30 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
24a40 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
24a50 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
24a60 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
24a70 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
24a80 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
24a90 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
24aa0 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
24ab0 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
24ac0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
24ad0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
24ae0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
24af0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
24b00 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
24b10 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
24b20 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
24b30 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
24b40 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
24b50 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
24b60 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
24b70 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
24b80 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
24b90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
24ba0 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
24bb0 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23  eInfo*, int*);.#
24bc0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f  define ONEPASS_O
24bd0 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20  FF      0       
24be0 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41   /* Use of ONEPA
24bf0 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a  SS not allowed *
24c00 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
24c10 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20  S_SINGLE   1    
24c20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76      /* ONEPASS v
24c30 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c  alid for a singl
24c40 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a  e row update */.
24c50 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
24c60 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20  MULTI    2      
24c70 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20    /* ONEPASS is 
24c80 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70  valid for multip
24c90 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20  le rows */.void 
24ca0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c  sqlite3ExprCodeL
24cb0 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50  oadIndexColumn(P
24cc0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
24cd0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  nt, int, int);.i
24ce0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
24cf0 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
24d00 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
24d10 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
24d20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24d30 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52  CodeGetColumnToR
24d40 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  eg(Parse*, Table
24d50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24d70 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
24d80 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
24d90 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
24da0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24db0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
24dc0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
24dd0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24de0 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
24df0 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
24e00 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24e10 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
24e20 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
24e30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
24e40 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
24e50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24e60 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
24e70 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
24e80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24e90 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
24ea0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24eb0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
24ec0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
24ed0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
24ee0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
24ef0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
24f00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24f10 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
24f20 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
24f30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24f40 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
24f50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24f60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24f70 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
24f80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24f90 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
24fa0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
24fb0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
24fc0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
24fd0 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
24fe0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
24ff0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25000 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
25010 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
25020 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25030 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
25040 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
25050 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
25060 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53  , u8);.#define S
25070 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20  QLITE_ECEL_DUP  
25080 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65      0x01  /* Dee
25090 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63  p, not shallow c
250a0 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  opies */.#define
250b0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43   SQLITE_ECEL_FAC
250c0 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46  TOR   0x02  /* F
250d0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
250e0 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66  nt terms */.#def
250f0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
25100 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f  REF      0x04  /
25110 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75  * Use ExprList.u
25120 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
25130 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
25140 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
25150 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
25160 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25170 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
25180 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
25190 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
251a0 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28  3ExprIfFalseDup(
251b0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
251c0 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
251d0 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
251e0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
251f0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
25200 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
25210 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
25220 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
25230 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
25240 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
25250 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
25260 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
25270 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72  *,int isView,str
25280 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
25290 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
252a0 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
252b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
252c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
252d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
252e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
252f0 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
25300 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
25310 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
25320 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
25330 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
25340 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
25350 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
25360 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
25370 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
25380 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
25390 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
253a0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
253b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
253c0 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
253d0 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  e(Expr*, Expr*, 
253e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
253f0 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
25400 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
25410 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
25420 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
25430 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
25440 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
25450 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
25460 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
25470 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
25480 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25490 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
254a0 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
254b0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
254c0 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
254d0 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
254e0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
254f0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
25500 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
25510 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
25520 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
25530 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
25540 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
25550 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
25560 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
25570 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
25580 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
25590 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
255a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
255b0 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
255c0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
255d0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
255e0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
255f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
25600 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
25610 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
25620 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
25630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
25640 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
25650 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25660 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
25670 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
25680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
25690 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
256a0 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
256b0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
256c0 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
256d0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
256e0 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
256f0 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
25700 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
25710 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
25720 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
25730 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
25740 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
25750 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
25760 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
25770 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
25780 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
25790 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
257a0 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65  xpr*,int);.#ifde
257b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
257c0 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74  CURSOR_HINTS.int
257d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74   sqlite3ExprCont
257e0 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70  ainsSubquery(Exp
257f0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  r*);.#endif.int 
25800 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
25810 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
25820 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25830 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
25840 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
25850 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
25860 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
25870 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
25880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
25890 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
258a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
258b0 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
258c0 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61  e(.    Parse*,Ta
258d0 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
258e0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
258f0 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69  ,u8,u8,int);.voi
25900 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
25910 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
25920 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
25930 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
25940 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25950 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
25960 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
25970 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
25980 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
25990 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
259a0 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
259b0 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
259c0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
259d0 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
259e0 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
259f0 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
25a00 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
25a30 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
25a40 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
25a50 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
25a60 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
25a70 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
25a80 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
25a90 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
25aa0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
25ab0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
25ac0 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
25ad0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
25ae0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
25af0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
25b00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25b10 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
25b20 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
25b30 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
25b40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
25b50 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
25b60 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
25b70 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
25b80 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
25b90 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
25ba0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
25bb0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
25bc0 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
25bd0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
25be0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
25bf0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
25c00 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
25c10 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
25c20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
25c30 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
25c40 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
25c50 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
25c60 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
25c70 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
25c80 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
25c90 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
25ca0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
25cb0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
25cc0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
25cd0 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
25ce0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
25cf0 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
25d00 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
25d10 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
25d20 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25d30 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
25d40 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
25d50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  if.void sqlite3F
25d60 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
25d70 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
25d80 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
25d90 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
25da0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
25db0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
25dc0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
25dd0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
25de0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
25df0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
25e00 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
25e10 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
25e20 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
25e30 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
25e40 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
25e50 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
25e60 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
25e70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
25e80 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
25e90 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
25ea0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
25eb0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
25ec0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
25ed0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
25ee0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
25ef0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
25f00 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
25f10 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
25f20 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
25f30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
25f40 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
25f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
25f60 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
25f70 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
25f80 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
25f90 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
25fa0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
25fd0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
25fe0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
25ff0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
26000 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
26010 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
26020 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
26030 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26040 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
26050 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
26060 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
26070 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
26080 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
26090 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
260a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
260b0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
260c0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
260d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
260e0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
260f0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
26100 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
26110 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
26120 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
26130 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
26140 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26160 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
26170 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26180 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
26190 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
261a0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
261b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
261c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
261d0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
261e0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
261f0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
26200 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26210 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
26220 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
26230 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
26240 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
26250 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
26260 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
26270 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
26280 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
26290 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
262a0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
262b0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262e0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
262f0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
26300 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
26310 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
26320 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
26330 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
26340 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
26350 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
26360 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
26370 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
26380 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
26390 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
263a0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
263b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
263c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
263d0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
263e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
263f0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
26400 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
26410 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
26420 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
26430 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
26440 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
26450 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
26460 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
26470 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
26480 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26490 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
264a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
264b0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
264c0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
264d0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
264e0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
264f0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
26500 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
26510 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
26520 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
26530 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
26540 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
26550 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
26560 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
26570 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
26580 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
26590 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
265a0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
265b0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
265c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
265d0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
265e0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
265f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
26600 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
26610 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
26620 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
26630 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
26640 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
26650 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
26660 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
26670 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
26680 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
266a0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
266b0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
266c0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
266d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
266e0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
266f0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
26700 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
26710 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
26720 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
26730 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
26740 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
26750 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
26760 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
26770 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
26780 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
26790 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
267a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
267b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
267c0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
267d0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
267e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
267f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
26800 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
26810 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
26820 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
26830 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
26840 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
26850 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
26860 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26870 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
26880 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26890 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
268a0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
268b0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
268c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
268d0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
268e0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
268f0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
26900 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
26910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
26920 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26930 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
26940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
26950 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
26960 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26970 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
26980 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
26990 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
269a0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
269b0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
269c0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
269d0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
269e0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
269f0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
26a00 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
26a10 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
26a20 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26a30 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
26a40 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
26a50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
26a60 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
26a70 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
26a80 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
26a90 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
26aa0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
26ab0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
26ac0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
26ad0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
26ae0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
26af0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
26b00 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
26b10 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
26b20 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
26b30 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
26b40 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
26b50 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
26b60 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
26b70 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
26b80 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
26b90 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
26ba0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
26bb0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
26bc0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
26bd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26be0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
26bf0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
26c00 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
26c10 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75  ouble);.#endif.u
26c20 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
26c30 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a  ToInt(LogEst);..
26c40 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
26c50 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
26c60 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
26c70 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
26c80 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
26c90 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
26ca0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
26cb0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
26cc0 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
26cd0 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
26ce0 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
26cf0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
26d00 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
26d10 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
26d20 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
26d30 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
26d40 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
26d50 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
26d60 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
26d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
26d80 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
26d90 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
26da0 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
26db0 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
26dc0 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
26dd0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
26de0 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
26df0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
26e00 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
26e10 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
26e20 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
26e30 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
26e40 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
26e50 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
26e60 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
26e70 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
26e80 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
26e90 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
26ea0 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
26eb0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
26ec0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
26ed0 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
26ee0 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
26ef0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
26f00 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
26f10 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
26f20 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
26f30 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
26f40 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
26f50 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
26f60 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
26f70 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
26f80 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
26f90 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
26fa0 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
26fb0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
26fc0 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
26fd0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
26fe0 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
26ff0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
27000 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
27010 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
27020 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
27030 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
27040 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
27050 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
27060 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
27070 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
27080 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
27090 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
270a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
270b0 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
270c0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
270d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
270e0 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
270f0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
27100 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
27110 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
27120 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
27130 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
27140 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
27150 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
27160 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
27170 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
27180 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
27190 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
271a0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
271b0 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
271c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e  defined(SQLITE_N
271d0 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f  EED_ERR_NAME).co
271e0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
271f0 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
27200 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
27210 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
27220 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27230 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
27240 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
27250 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
27260 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
27270 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
27280 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
27290 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
272a0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
272b0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
272c0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
272d0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
272e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
272f0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
27300 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
27310 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
27320 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
27330 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
27340 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
27350 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
27360 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
27370 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
27380 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
27390 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
273a0 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
273b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
273c0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
273d0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
273e0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
273f0 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
27400 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
27410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
27420 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
27430 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
27440 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
27450 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
27460 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
27470 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
27480 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
27490 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
274a0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
274b0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
274c0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
274d0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
274e0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
274f0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
27500 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27510 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
27520 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
27530 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
27540 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
27550 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
27560 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
27570 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
27580 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
27590 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
275a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
275b0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
275c0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
275d0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
275e0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
275f0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
27600 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
27610 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
27620 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
27630 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
27640 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
27650 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
27660 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
27670 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
27680 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
27690 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
276a0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
276b0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
276c0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
276d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
276e0 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
276f0 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
27700 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
27710 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
27720 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
27730 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
27740 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
27750 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27760 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
27770 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
27780 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
27790 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
277a0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
277b0 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
277c0 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
277d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
277e0 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
277f0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
27800 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
27810 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
27820 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
27830 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
27840 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
27850 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
27860 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
27870 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
27880 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
27890 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
278a0 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
278b0 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
278c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
278d0 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
278e0 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
278f0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
27900 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
27910 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
27920 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27940 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
27950 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
27960 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
27970 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
27980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
27990 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
279a0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
279b0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
279c0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
279d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
279e0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
279f0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
27a00 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
27a10 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
27a20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
27a30 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
27a40 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
27a50 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
27a60 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
27a70 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
27a80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27a90 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
27aa0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
27ab0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
27ac0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
27ad0 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
27ae0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
27af0 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
27b00 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
27b10 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
27b20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
27b30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27b40 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
27b50 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
27b60 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
27b70 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
27b80 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
27b90 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
27ba0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
27bb0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27bc0 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
27bd0 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
27be0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
27bf0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27c00 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
27c10 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
27c20 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
27c30 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
27c40 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
27c50 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
27c60 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
27c70 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
27c80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27c90 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
27ca0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
27cb0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27cc0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
27cd0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
27ce0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
27cf0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
27d00 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
27d10 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
27d20 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
27d30 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
27d40 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
27d50 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
27d60 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
27d70 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
27d80 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
27d90 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
27da0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
27db0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
27dc0 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
27dd0 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
27de0 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
27df0 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
27e00 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
27e10 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
27e20 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
27e30 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
27e40 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
27e50 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
27e60 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
27e70 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
27e80 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
27e90 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
27ea0 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
27eb0 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
27ec0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
27ed0 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
27ee0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
27ef0 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
27f00 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
27f10 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
27f20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
27f30 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
27f40 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
27f50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27f60 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
27f70 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
27f80 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
27f90 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
27fa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
27fb0 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
27fc0 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
27fd0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
27fe0 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
27ff0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
28000 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28010 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
28020 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
28030 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
28040 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
28050 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
28060 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
28070 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
28080 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28090 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
280a0 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
280b0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
280c0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
280d0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
280e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
280f0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
28100 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
28110 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
28120 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
28130 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
28140 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
28150 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
28160 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
28170 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
28180 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
28190 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
281a0 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
281b0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
281c0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
281d0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
281e0 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
281f0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
28200 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
28210 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
28220 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
28230 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28240 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
28250 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
28260 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
28270 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
28280 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
28290 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
282a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
282b0 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d  endChar(StrAccum
282c0 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61  *,int,char);.cha
282d0 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
282e0 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
282f0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
28300 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
28310 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
28320 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
28330 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
28340 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
28350 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
28360 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
28370 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
28380 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
28390 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
283a0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
283b0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
283c0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
283d0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
283e0 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
283f0 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  u8 *);..#ifdef S
28400 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
28410 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
28420 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
28430 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
28440 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
28450 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61  ProbeSetValue(Pa
28460 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61  rse*,Index*,Unpa
28470 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70  ckedRecord**,Exp
28480 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  r*,u8,int,int*);
28490 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
284a0 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50  4ValueFromExpr(P
284b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38  arse*, Expr*, u8
284c0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
284d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
284e0 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
284f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
28500 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
28510 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a  4Column(sqlite3*
28520 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
28530 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  nt, int, sqlite3
28540 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69  _value**);.#endi
28550 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
28560 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
28570 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
28580 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
28590 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
285a0 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b  (void*(*)(u64));
285b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
285c0 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
285d0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
285e0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
285f0 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
28600 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23  oken, Parse*);.#
28610 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58  ifdef YYTRACKMAX
28620 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74  STACKDEPTH.  int
28630 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74   sqlite3ParserSt
28640 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a  ackPeak(void*);.
28650 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
28660 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
28670 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
28680 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28690 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
286a0 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  SION.  void sqli
286b0 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
286c0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  ns(sqlite3*);.#e
286d0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
286e0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
286f0 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ons(X).#endif..#
28700 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28710 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
28720 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61    void sqlite3Ta
28730 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c  bleLock(Parse *,
28740 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63   int, int, u8, c
28750 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65  onst char *);.#e
28760 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28770 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76  lite3TableLock(v
28780 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66  ,w,x,y,z).#endif
28790 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
287a0 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  TEST.  int sqlit
287b0 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e  e3Utf8To8(unsign
287c0 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  ed char*);.#endi
287d0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
287e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
287f0 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  LE.#  define sql
28800 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29  ite3VtabClear(Y)
28810 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
28820 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20  e3VtabSync(X,Y) 
28830 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
28840 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52  ine sqlite3VtabR
28850 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65  ollback(X).#  de
28860 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
28870 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66  Commit(X).#  def
28880 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
28890 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64  nSync(db) 0.#  d
288a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
288b0 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66  bLock(X) .#  def
288c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
288d0 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
288e0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
288f0 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
28900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28910 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
28920 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
28930 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
28940 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
28950 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
28960 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
28970 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
28980 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
28990 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
289a0 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
289b0 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
289c0 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
289d0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
289e0 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
289f0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
28a00 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
28a10 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
28a20 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
28a30 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
28a40 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
28a50 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
28a60 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
28a70 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
28a80 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
28a90 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
28aa0 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
28ab0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
28ac0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
28ad0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
28ae0 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
28af0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
28b00 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
28b10 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
28b20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
28b30 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
28b40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64  *, Table*);.#  d
28b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28b60 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
28b70 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
28b80 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
28b90 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
28ba0 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
28bb0 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
28bc0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
28bd0 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
28be0 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
28bf0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
28c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28c10 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
28c20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
28c30 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28c40 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
28c50 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
28c60 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
28c70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
28c80 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
28c90 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
28ca0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
28cb0 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
28cc0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
28cd0 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
28ce0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
28cf0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
28d00 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
28d10 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
28d20 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
28d30 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
28d40 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
28d50 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
28d60 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
28d70 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
28d80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
28d90 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
28da0 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
28db0 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
28dc0 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
28dd0 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
28de0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
28df0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
28e00 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28e10 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
28e20 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
28e30 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
28e40 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
28e50 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
28e60 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
28e70 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
28e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
28e90 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
28ea0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
28eb0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28ec0 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
28ed0 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
28ee0 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
28ef0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
28f00 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
28f10 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
28f20 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
28f30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28f40 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
28f50 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
28f60 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
28f70 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
28f80 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
28f90 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
28fa0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
28fb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
28fc0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
28fd0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
28fe0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
28ff0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
29000 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
29010 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
29020 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
29030 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
29040 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
29050 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
29060 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
29070 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
29080 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
29090 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
290a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
290b0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
290c0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
290d0 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
290e0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
290f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29100 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
29110 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
29120 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
29130 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
29140 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
29150 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
29160 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
29170 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
29180 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
29190 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
291a0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
291b0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
291c0 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
291d0 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
291e0 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
291f0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
29200 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
29210 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
29220 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
29230 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
29240 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
29250 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
29260 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
29270 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
29280 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
29290 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
292a0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
292b0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
292c0 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
292d0 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
292e0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a  ctionality is .*
292f0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
29300 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
29310 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
29320 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
29330 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
29340 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
29350 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
29360 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
29370 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
29380 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
29390 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
293a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
293b0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
293c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
293d0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
293e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
293f0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
29400 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
29410 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
29420 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
29430 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
29440 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
29450 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
29460 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
29470 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
29480 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
29490 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
294a0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
294b0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
294c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
294d0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
294e0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
294f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
29500 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
29510 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
29520 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
29530 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
29540 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
29550 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
29560 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29570 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
29580 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69  ,c,d)    0.#endi
29590 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
295a0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
295b0 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
295c0 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
295d0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
295e0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
295f0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
29600 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
29610 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
29620 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
29630 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
29640 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29650 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
29660 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
29670 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
29680 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
29690 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
296a0 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
296b0 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
296c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
296d0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
296e0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
296f0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
29700 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
29710 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
29720 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
29730 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
29740 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
29750 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
29760 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
29770 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
29780 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f  sent if SQLITE_O
29790 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
297a0 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
297b0 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
297c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
297d0 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  IN_TEST.  void s
297e0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
297f0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
29800 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
29810 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
29820 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
29830 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
29840 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
29850 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29860 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
29870 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
29880 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
29890 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
298a0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a  e3FindInIndex().
298b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
298c0 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
298d0 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74   1   /* Search t
298e0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
298f0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
29900 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
29910 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65         2   /* Se
29920 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61  arch an ephemera
29930 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66  l b-tree */.#def
29940 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
29950 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a  EX_ASC    3   /*
29960 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
29970 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ASCENDING */.#de
29980 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
29990 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f  DEX_DESC   4   /
299a0 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
299b0 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23   DESCENDING */.#
299c0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
299d0 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20  NOOP         5  
299e0 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61   /* No table ava
299f0 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70  ilable. Use comp
29a00 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a  arisons */./*.**
29a10 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66   Allowed flags f
29a20 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d  or the 3rd param
29a30 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46  eter to sqlite3F
29a40 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f  indInIndex()..*/
29a50 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
29a60 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78  X_NOOP_OK     0x
29a70 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72  0001  /* OK to r
29a80 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e  eturn IN_INDEX_N
29a90 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  OOP */.#define I
29aa0 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48  N_INDEX_MEMBERSH
29ab0 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49  IP  0x0002  /* I
29ac0 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
29ad0 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74  for membership t
29ae0 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  est */.#define I
29af0 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20  N_INDEX_LOOP    
29b00 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49      0x0004  /* I
29b10 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
29b20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74  as a loop */.int
29b30 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
29b40 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
29b50 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b  r *, u32, int*);
29b60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29b70 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
29b80 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
29b90 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
29ba0 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
29bb0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
29bc0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
29bd0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
29be0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
29bf0 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20  lite3_vfs *);.  
29c00 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
29c10 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
29c20 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20  _file *);.  int 
29c30 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
29c40 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c  ists(sqlite3_fil
29c50 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23  e *p);.#else.  #
29c60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
29c70 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20  urnalSize(pVfs) 
29c80 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c  ((pVfs)->szOsFil
29c90 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  e).  #define sql
29ca0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
29cb0 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76  s(p) 1.#endif..v
29cc0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
29cd0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
29ce0 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73  3_file *);.int s
29cf0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
29d00 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20  Size(void);.int 
29d10 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72  sqlite3IsMemJour
29d20 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  nal(sqlite3_file
29d30 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
29d40 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
29d50 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
29d60 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
29d70 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
29d80 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
29d90 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
29da0 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
29db0 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
29dc0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
29dd0 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
29de0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29df0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
29e00 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
29e10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
29e20 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
29e30 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
29e40 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
29e50 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
29e60 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
29e70 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
29e80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
29e90 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
29ea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29eb0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
29ec0 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
29ed0 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
29ee0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
29ef0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
29f00 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
29f10 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
29f20 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
29f30 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
29f40 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
29f50 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
29f60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29f70 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
29f80 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
29f90 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
29fa0 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
29fb0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
29fc0 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
29fd0 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
29fe0 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
29ff0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
2a000 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
2a010 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
2a020 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
2a030 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
2a040 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2a050 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2a060 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
2a070 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
2a080 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
2a090 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
2a0a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2a0b0 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
2a0c0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2a0d0 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
2a0e0 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
2a0f0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
2a100 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
2a110 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
2a120 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
2a130 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
2a140 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
2a150 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
2a160 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2a170 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a180 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
2a190 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
2a1a0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
2a1b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
2a1c0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
2a1d0 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
2a1e0 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
2a1f0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
2a200 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
2a210 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
2a220 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
2a230 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
2a240 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
2a250 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
2a260 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
2a270 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
2a280 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2a290 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
2a2a0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
2a2b0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
2a2c0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
2a2d0 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
2a2e0 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
2a2f0 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
2a300 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
2a310 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
2a320 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2a330 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
2a340 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
2a350 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
2a360 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2a370 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2a380 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2a390 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2a3a0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2a3b0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
2a3c0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2a3d0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
2a3e0 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
2a3f0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
2a400 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2a410 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
2a420 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
2a430 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
2a440 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2a450 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2a460 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2a470 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2a480 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2a490 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
2a4a0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
2a4b0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
2a4c0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2a4d0 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
2a4e0 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
2a4f0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
2a500 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
2a510 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
2a520 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
2a530 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
2a540 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
2a550 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
2a560 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
2a570 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
2a580 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
2a590 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
2a5a0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
2a5b0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
2a5c0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
2a5d0 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
2a5e0 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
2a5f0 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
2a600 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
2a610 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
2a620 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2a630 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
2a640 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
2a650 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
2a660 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
2a670 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
2a680 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
2a690 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
2a6a0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
2a6b0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
2a6c0 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
2a6d0 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
2a6e0 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
2a6f0 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
2a700 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
2a710 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
2a720 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
2a730 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
2a740 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
2a750 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
2a760 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
2a770 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
2a780 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2a790 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
2a7a0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
2a7b0 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
2a7c0 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
2a7d0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2a7e0 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
2a7f0 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
2a800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2a810 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
2a820 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
2a830 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
2a840 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
2a850 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
2a860 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
2a870 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
2a880 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
2a890 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
2a8a0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
2a8b0 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68  0x02  /* Heap th
2a8c0 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2a8d0 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a  en lookaside */.
2a8e0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2a8f0 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
2a900 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
2a910 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
2a920 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
2a930 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
2a940 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
2a950 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
2a960 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
2a970 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
2a980 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
2a990 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
2a9a0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
2a9b0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
2a9c0 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
2a9d0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
2a9e0 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
2a9f0 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
2aa00 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
2aa10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2aa20 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41  NABLE_DBSTAT_VTA
2aa30 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
2aa40 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
2aa50 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69  qlite3DbstatRegi
2aa60 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
2aa70 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
2aa80 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
2aa90 2a 2f 0a                                         */.