/ Hex Artifact Content
Login

Artifact 2c8f1aad45b003a5efd615ac1d12aca83cc8d364:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1a10: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1a20: 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  AFE macro must b
1a30: 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20  e defined as 0, 
1a40: 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65  1, or 2..** 0 me
1a50: 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20  ans mutexes are 
1a60: 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61  permanently disa
1a70: 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72  ble and the libr
1a80: 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20  ary is never.** 
1a90: 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d  threadsafe.  1 m
1aa0: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
1ab0: 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77   is serialized w
1ac0: 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68  hich is the high
1ad0: 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20  est.** level of 
1ae0: 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32  threadsafety.  2
1af0: 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61   means the libra
1b00: 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61  ry is multithrea
1b10: 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a  ded - multiple.*
1b20: 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73  * threads can us
1b30: 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67  e SQLite as long
1b40: 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61   as no two threa
1b50: 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68  ds try to use th
1b60: 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61  e same.** databa
1b70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74  se connection at
1b80: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a   the same time..
1b90: 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  **.** Older vers
1ba0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75  ions of SQLite u
1bb0: 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20  sed an optional 
1bc0: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
1bd0: 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20  ..** We support 
1be0: 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e  that for legacy.
1bf0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c00: 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  (SQLITE_THREADSA
1c10: 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64  FE).# if defined
1c20: 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20  (THREADSAFE).#  
1c30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1c40: 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44  HREADSAFE THREAD
1c50: 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20  SAFE.# else.#   
1c60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
1c70: 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d  READSAFE 1 /* IM
1c80: 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39  P: R-07272-22309
1c90: 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64   */.# endif.#end
1ca0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73  if../*.** Powers
1cb0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73  afe overwrite is
1cc0: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20   on by default. 
1cd0: 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e   But can be turn
1ce0: 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20  ed off using.** 
1cf0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57  the -DSQLITE_POW
1d00: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1d10: 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  =0 command-line 
1d20: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
1d30: 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ef SQLITE_POWERS
1d40: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20  AFE_OVERWRITE.# 
1d50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f  define SQLITE_PO
1d60: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1d70: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
1d80: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
1d90: 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d  -25715-37072 Mem
1da0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
1db0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e  tatistics are en
1dc0: 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61  abled by.** defa
1dd0: 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74  ult unless SQLit
1de0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
1df0: 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  th SQLITE_DEFAUL
1e00: 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e  T_MEMSTATUS=0 in
1e10: 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d  .** which case m
1e20: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1e30: 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
1e40: 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61  disabled by defa
1e50: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ult..*/.#if !def
1e60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41  ined(SQLITE_DEFA
1e70: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23  ULT_MEMSTATUS).#
1e80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
1e90: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1ea0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1eb0: 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
1ec0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1ed0: 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66  cros must be def
1ee0: 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ined in order to
1ef0: 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63  .** specify whic
1f00: 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  h memory allocat
1f10: 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f  ion subsystem to
1f20: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   use..**.**     
1f30: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f40: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f  LLOC          //
1f50: 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74   Use normal syst
1f60: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20  em malloc().**  
1f70: 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f     SQLITE_WIN32_
1f80: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
1f90: 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61   // Use Win32 na
1fa0: 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a  tive heap API.**
1fb0: 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f       SQLITE_ZERO
1fc0: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1fd0: 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62     // Use a stub
1fe0: 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20   allocator that 
1ff0: 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20  always fails.** 
2000: 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45      SQLITE_MEMDE
2010: 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20  BUG             
2020: 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76    // Debugging v
2030: 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d  ersion of system
2040: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20   malloc().**.** 
2050: 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74  On Windows, if t
2060: 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  he SQLITE_WIN32_
2070: 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20  MALLOC_VALIDATE 
2080: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
2090: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65   and the.** asse
20a0: 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e  rt() macro is en
20b0: 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c  abled, each call
20c0: 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20   into the Win32 
20d0: 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73  native heap subs
20e0: 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61  ystem.** will ca
20f0: 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65  use HeapValidate
2100: 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20   to be called.  
2110: 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69  If heap validati
2120: 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20  on should fail, 
2130: 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20  an.** assertion 
2140: 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65  will be triggere
2150: 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65  d..**.** If none
2160: 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
2170: 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  e defined, then 
2180: 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45  set SQLITE_SYSTE
2190: 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74  M_MALLOC as.** t
21a0: 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23  he default..*/.#
21b0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
21c0: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
21d0: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
21e0: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
21f0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2200: 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  d(SQLITE_ZERO_MA
2210: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2220: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
2230: 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22  BUG)>1.# error "
2240: 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74  Two or more of t
2250: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
2260: 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
2270: 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c  uration options\
2280: 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75  . are defined bu
2290: 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73  t at most one is
22a0: 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49   allowed:\. SQLI
22b0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
22c0: 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  , SQLITE_WIN32_M
22d0: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45  ALLOC, SQLITE_ME
22e0: 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45  MDEBUG,\. SQLITE
22f0: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65  _ZERO_MALLOC".#e
2300: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2310: 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d  (SQLITE_SYSTEM_M
2320: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2330: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
2340: 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  2_MALLOC) \.  + 
2350: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a  defined(SQLITE_Z
2360: 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  ERO_MALLOC) \.  
2370: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2380: 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20  _MEMDEBUG)==0.# 
2390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59  define SQLITE_SY
23a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65  STEM_MALLOC 1.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53  ndif../*.** If S
23c0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
23d0: 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a  T_LIMIT is not z
23e0: 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f  ero, then try to
23f0: 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a   keep the.** siz
2400: 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  es of memory all
2410: 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74  ocations below t
2420: 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20  his value where 
2430: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66  possible..*/.#if
2440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2450: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
2460: 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IT).# define SQL
2470: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2480: 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69  LIMIT 1024.#endi
2490: 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64  f../*.** We need
24a0: 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45   to define _XOPE
24b0: 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c  N_SOURCE as foll
24c0: 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ows in order to 
24d0: 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73  enable.** recurs
24e0: 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d  ive mutexes on m
24f0: 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73  ost Unix systems
2500: 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e   and fchmod() on
2510: 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74   OpenBSD..** But
2520: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64   _XOPEN_SOURCE d
2530: 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f  efine causes pro
2540: 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53  blems for Mac OS
2550: 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69   X, so omit.** i
2560: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
2570: 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ed(_XOPEN_SOURCE
2580: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f  ) && !defined(__
2590: 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65  DARWIN__) && !de
25a0: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
25b0: 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45  .#  define _XOPE
25c0: 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e  N_SOURCE 600.#en
25d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55  dif../*.** NDEBU
25e0: 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42  G and SQLITE_DEB
25f0: 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73  UG are opposites
2600: 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77  .  It should alw
2610: 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74  ays be true that
2620: 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42  .** defined(NDEB
2630: 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51  UG)==!defined(SQ
2640: 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66  LITE_DEBUG).  If
2650: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72   this is not cur
2660: 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20  rently true,.** 
2670: 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20  make it true by 
2680: 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65  defining or unde
2690: 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a  fining NDEBUG..*
26a0: 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45  *.** Setting NDE
26b0: 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f  BUG makes the co
26c0: 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66  de smaller and f
26d0: 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69  aster by disabli
26e0: 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  ng the.** assert
26f0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
2700: 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77   the code.  So w
2710: 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75  e want the defau
2720: 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  lt action.** to 
2730: 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f  be for NDEBUG to
2740: 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42   be set and NDEB
2750: 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e  UG to be undefin
2760: 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54  ed only if SQLIT
2770: 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65  E_DEBUG.** is se
2780: 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20  t.  Thus NDEBUG 
2790: 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69  becomes an opt-i
27a0: 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e  n rather than an
27b0: 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74   opt-out.** feat
27c0: 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ure..*/.#if !def
27d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20  ined(NDEBUG) && 
27e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27f0: 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65  DEBUG) .# define
2800: 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66   NDEBUG 1.#endif
2810: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45  .#if defined(NDE
2820: 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28  BUG) && defined(
2830: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20  SQLITE_DEBUG).# 
2840: 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e  undef NDEBUG.#en
2850: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c  dif../*.** Enabl
2860: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
2870: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2880: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
2890: 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a   is turned on..*
28a0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
28c0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26  LAIN_COMMENTS) &
28d0: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
28e0: 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  _DEBUG).# define
28f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45   SQLITE_ENABLE_E
2900: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20  XPLAIN_COMMENTS 
2910: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2920: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2930: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2940: 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20  aid in coverage 
2950: 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a  testing.  When .
2960: 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  ** doing coverag
2970: 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63  e testing, the c
2980: 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20  ondition inside 
2990: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  the argument to.
29a0: 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75  ** testcase() mu
29b0: 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20  st be evaluated 
29c0: 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61  both true and fa
29d0: 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  lse in order to.
29e0: 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e  ** get full bran
29f0: 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68  ch coverage.  Th
2a00: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
2a10: 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a  ro is inserted.*
2a20: 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65  * to help ensure
2a30: 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63   adequate test c
2a40: 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65  overage in place
2a50: 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a  s where simple.*
2a60: 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69  * condition/deci
2a70: 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73  sion coverage is
2a80: 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f   inadequate.  Fo
2a90: 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63  r example, testc
2aa0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20  ase().** can be 
2ab0: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
2ac0: 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65  e boundary value
2ad0: 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46  s are tested.  F
2ae0: 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65  or.** bitmask te
2af0: 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20  sts, testcase() 
2b00: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
2b10: 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69  ake sure each bi
2b20: 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63  t.** is signific
2b30: 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20  ant and used at 
2b40: 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20  least once.  On 
2b50: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
2b60: 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69  s.** where multi
2b70: 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20  ple cases go to 
2b80: 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f  the same block o
2b90: 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65  f code, testcase
2ba0: 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65  ().** can insure
2bb0: 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20   that all cases 
2bc0: 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a  are evaluated..*
2bd0: 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  *.*/.#ifdef SQLI
2be0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2bf0: 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2c00: 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20  overage(int);.# 
2c10: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2c20: 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c  X)  if( X ){ sql
2c30: 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c  ite3Coverage(__L
2c40: 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a  INE__); }.#else.
2c50: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
2c60: 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e(X).#endif../*.
2c70: 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20  ** The TESTONLY 
2c80: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2c90: 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c   enclose variabl
2ca0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f  e declarations o
2cb0: 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20  r.** other bits 
2cc0: 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65  of code that are
2cd0: 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f   needed to suppo
2ce0: 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  rt the arguments
2cf0: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63  .** within testc
2d00: 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74  ase() and assert
2d10: 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69  () macros..*/.#i
2d20: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
2d30: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
2d40: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2d50: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53  ST).# define TES
2d60: 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  TONLY(X)  X.#els
2d70: 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  e.# define TESTO
2d80: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
2d90: 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77  *.** Sometimes w
2da0: 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61  e need a small a
2db0: 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75  mount of code su
2dc0: 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65  ch as a variable
2dd0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
2de0: 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20  ** to setup for 
2df0: 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29  a later assert()
2e00: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20   statement.  We 
2e10: 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73  do not want this
2e20: 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65   code to.** appe
2e30: 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29  ar when assert()
2e40: 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54   is disabled.  T
2e50: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2e60: 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a  ro is therefore.
2e70: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61  ** used to conta
2e80: 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f  in that setup co
2e90: 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61  de.  The "VVA" a
2ea0: 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f  cronym stands fo
2eb0: 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69  r.** "Verificati
2ec0: 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20  on, Validation, 
2ed0: 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
2ee0: 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  n".  In other wo
2ef0: 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65  rds, the.** code
2f00: 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59   within VVA_ONLY
2f10: 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e  () will only run
2f20: 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61   during verifica
2f30: 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a  tion processes..
2f40: 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
2f50: 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  G.# define VVA_O
2f60: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2f70: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
2f80: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2f90: 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e  ** The ALWAYS an
2fa0: 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73  d NEVER macros s
2fb0: 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20  urround boolean 
2fc0: 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63  expressions whic
2fd0: 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64  h .** are intend
2fe0: 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20  ed to always be 
2ff0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72  true or false, r
3000: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75  espectively.  Su
3010: 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  ch.** expression
3020: 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  s could be omitt
3030: 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65  ed from the code
3040: 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75   completely.  Bu
3050: 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e  t they.** are in
3060: 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20  cluded in a few 
3070: 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74  cases in order t
3080: 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65  o enhance the re
3090: 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53  silience.** of S
30a0: 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63  QLite to unexpec
30b0: 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74  ted behavior - t
30c0: 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20  o make the code 
30d0: 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a  "self-healing".*
30e0: 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72  * or "ductile" r
30f0: 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67  ather than being
3100: 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63   "brittle" and c
3110: 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66  rashing at the f
3120: 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20  irst.** hint of 
3130: 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69  unplanned behavi
3140: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  or..**.** In oth
3150: 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53  er words, ALWAYS
3160: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61   and NEVER are a
3170: 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69  dded for defensi
3180: 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57  ve code..**.** W
3190: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
31a0: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
31b0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
31c0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
31d0: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
31e0: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
31f0: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
3200: 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c  they specify wil
3210: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
3220: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
3230: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  code..*/.#if def
3240: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
3250: 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66  RAGE_TEST).# def
3260: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
3270: 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20     (1).# define 
3280: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
3290: 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
32a0: 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69  d(NDEBUG).# defi
32b0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
32c0: 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74    ((X)?1:(assert
32d0: 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65  (0),0)).# define
32e0: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
32f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3300: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3310: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3320: 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65      (X).# define
3330: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3340: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3350: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3360: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3370: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3380: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3390: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
33a0: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
33b0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
33c0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
33d0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
33e0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
33f0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3400: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3410: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3420: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3430: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3440: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3450: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3460: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3470: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3480: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3490: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
34a0: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
34b0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
34c0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
34d0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
34e0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
34f0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3500: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3510: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3520: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3530: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3540: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3550: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3560: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3570: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3580: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3590: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
35a0: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
35b0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
35c0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
35d0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
35e0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
35f0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3600: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3610: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3620: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3630: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3640: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3650: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3660: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3670: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3680: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3690: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
36a0: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
36b0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
36c0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
36d0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
36e0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
36f0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3700: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3710: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3720: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3730: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3740: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3750: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3760: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3770: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3780: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3790: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
37a0: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
37b0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
37c0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
37d0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
37e0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
37f0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3800: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3810: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3820: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3830: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3840: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3850: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3860: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3870: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3880: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3890: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
38a0: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
38b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
38c0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
38d0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
38e0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
38f0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3900: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
3910: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
3920: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
3930: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
3940: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
3950: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
3960: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
3970: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
3980: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
3990: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
39a0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
39b0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
39c0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
39d0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
39e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
39f0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3a00: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
3a10: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
3a20: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
3a30: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3a40: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
3a50: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
3a60: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
3a70: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
3a80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3a90: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
3aa0: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
3ab0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
3ac0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
3ad0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
3ae0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
3af0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
3b00: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
3b10: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
3b20: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
3b30: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
3b40: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3b50: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
3b60: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
3b70: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
3b80: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
3b90: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
3ba0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
3bb0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
3bc0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
3bd0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
3be0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
3bf0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
3c00: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
3c10: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
3c20: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
3c30: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
3c40: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
3c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3c60: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
3c70: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3c80: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
3c90: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
3ca0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3cb0: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
3cc0: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
3cd0: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
3ce0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
3cf0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
3d00: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
3d10: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
3d20: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
3d30: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
3d40: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
3d50: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
3d60: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
3d70: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
3d80: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
3d90: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
3da0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
3db0: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
3dc0: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
3dd0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
3de0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
3df0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3e00: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
3e10: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
3e20: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
3e30: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
3e40: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
3e50: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
3e60: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
3e70: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
3e80: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
3e90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3ea0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
3eb0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3ec0: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
3ed0: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
3ee0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
3ef0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
3f00: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
3f10: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
3f20: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
3f30: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
3f40: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
3f50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
3f60: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
3f70: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3f80: 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53  ORE 1.# define S
3f90: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3fa0: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
3fb0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
3fc0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
3fd0: 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20  If no value has 
3fe0: 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f  been provided fo
3ff0: 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  r SQLITE_MAX_WOR
4000: 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20  KER_THREADS, or 
4010: 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d  if.** SQLITE_TEM
4020: 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74  P_STORE is set t
4030: 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74  o 3 (never use t
4040: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c  emporary files),
4050: 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a   set it .** to z
4060: 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ero..*/.#if SQLI
4070: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33  TE_TEMP_STORE==3
4080: 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41   || SQLITE_THREA
4090: 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66  DSAFE==0.# undef
40a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
40b0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
40c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
40d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
40e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
40f0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4100: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4110: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
4120: 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65  KER_THREADS 8.#e
4130: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4140: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4150: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
4160: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4170: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
4180: 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  S 0.#endif.#if S
4190: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
41a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c  RKER_THREADS>SQL
41b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
41c0: 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53  HREADS.# undef S
41d0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
41e0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
41f0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
4200: 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49  KER_THREADS SQLI
4210: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
4220: 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66  R_THREADS.#endif
4230: 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  .../*.** GCC doe
4240: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
4250: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
4260: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
4270: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
4280: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
4290: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
42a0: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
42b0: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
42c0: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
42d0: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
42e0: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
42f0: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d  ** Macros to com
4300: 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64  pute minimum and
4310: 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20   maximum of two 
4320: 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  numbers..*/.#def
4330: 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41  ine MIN(A,B) ((A
4340: 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23  )<(B)?(A):(B)).#
4350: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
4360: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
4370: 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77  )../*.** Swap tw
4380: 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70  o objects of typ
4390: 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69  e TYPE..*/.#defi
43a0: 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42  ne SWAP(TYPE,A,B
43b0: 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42  ) {TYPE t=A; A=B
43c0: 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ; B=t;}../*.** C
43d0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
43e0: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
43f0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
4400: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
4410: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
4420: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
4430: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
4440: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
4450: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
4460: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4470: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
4480: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
4490: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
44a0: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
44b0: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
44c0: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
44d0: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
44e0: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
44f0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
4500: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
4510: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
4520: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
4530: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
4540: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
4550: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
4560: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
4570: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
4580: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
4590: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
45a0: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
45b0: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
45c0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
45d0: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
45e0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
45f0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
4600: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
4610: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
4620: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4630: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
4640: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4650: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
4660: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4670: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
4680: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4690: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
46a0: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
46b0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
46c0: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
46d0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
46e0: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
46f0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
4700: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
4710: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
4720: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
4730: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
4740: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4750: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
4760: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4770: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
4780: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
4790: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
47a0: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
47b0: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
47c0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
47d0: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
47e0: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
47f0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4800: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
4810: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
4820: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4830: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4840: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4850: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
4860: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
4870: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
4880: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
4890: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
48a0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
48b0: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
48c0: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
48d0: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
48e0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
48f0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
4900: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
4910: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
4920: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4930: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
4940: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
4950: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
4960: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4970: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
4980: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
4990: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
49a0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
49b0: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
49c0: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
49d0: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
49e0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
49f0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
4a00: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
4a10: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
4a20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
4a30: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
4a40: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
4a50: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
4a60: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
4a70: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
4a80: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
4a90: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
4aa0: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
4ab0: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
4ac0: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
4ad0: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
4ae0: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
4af0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
4b00: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
4b10: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
4b20: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
4b30: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
4b40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4b50: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
4b60: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
4b70: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
4b80: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
4b90: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
4ba0: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
4bb0: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
4bc0: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
4bd0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4be0: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
4bf0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
4c00: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
4c10: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
4c20: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
4c30: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
4c40: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
4c50: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
4c60: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
4c70: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
4c80: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
4c90: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
4ca0: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
4cb0: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
4cc0: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
4cd0: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
4ce0: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
4cf0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
4d00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4d10: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
4d20: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
4d30: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
4d40: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
4d50: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
4d60: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
4d70: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
4d80: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
4d90: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
4da0: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
4db0: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
4dc0: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
4dd0: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
4de0: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
4df0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
4e00: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
4e10: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
4e20: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
4e30: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
4e40: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
4e50: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
4e60: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
4e70: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
4e80: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
4e90: 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61  Est quantities a
4ea0: 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65  re suppose to be
4eb0: 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e   estimates,.** n
4ec0: 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c  ot exact values,
4ed0: 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f   this imprecisio
4ee0: 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c  n is not a probl
4ef0: 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73  em..**.** "LogEs
4f00: 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20  t" is short for 
4f10: 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74  "Logarithmic Est
4f20: 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78  imate"..**.** Ex
4f30: 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20  amples:.**      
4f40: 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20  1 -> 0          
4f50: 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20      20 -> 43    
4f60: 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31        10000 -> 1
4f70: 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20  32.**      2 -> 
4f80: 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32  10             2
4f90: 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20  5 -> 46         
4fa0: 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a   25000 -> 146.**
4fb0: 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20        3 -> 16   
4fc0: 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20           100 -> 
4fd0: 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30  66        100000
4fe0: 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20  0 -> 199.**     
4ff0: 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20   4 -> 20        
5000: 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20     1000 -> 99   
5010: 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20       1048576 -> 
5020: 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e  200.**     10 ->
5030: 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30   33           10
5040: 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39  24 -> 100    429
5050: 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a  4967296 -> 320.*
5060: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20  *.** The LogEst 
5070: 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20  can be negative 
5080: 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63  to indicate frac
5090: 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a  tional values. .
50a0: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
50b0: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
50c0: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
50d0: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
50e0: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
50f0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5100: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
5110: 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50  Set the SQLITE_P
5120: 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20  TRSIZE macro to 
5130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
5140: 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72  tes in a pointer
5150: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5160: 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20  TE_PTRSIZE.# if 
5170: 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46  defined(__SIZEOF
5180: 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20  _POINTER__).#   
5190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
51a0: 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50  RSIZE __SIZEOF_P
51b0: 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20  OINTER__.# elif 
51c0: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
51d0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
51e0: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
51f0: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
5200: 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69     \.       defi
5210: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c  ned(_M_ARM)   ||
5220: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
5230: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
5240: 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e  __x86).#   defin
5250: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5260: 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65   4.# else.#   de
5270: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5280: 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 8.# endif.#e
5290: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
52a0: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
52b0: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
52c0: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
52d0: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
52e0: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
52f0: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
5300: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
5310: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
5320: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
5330: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
5340: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
5350: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
5360: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
5370: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
5380: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
5390: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
53a0: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
53b0: 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  -DSQLITE_RUNTIME
53c0: 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20  _BYTEORDER=1 is 
53d0: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
53e0: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
53f0: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
5400: 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
5410: 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
5420: 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74  .const int sqlit
5430: 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65  e3one = 1;.#else
5440: 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e  .extern const in
5450: 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65  t sqlite3one;.#e
5460: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
5470: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
5480: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
5490: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
54a0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
54b0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
54c0: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
54d0: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
54e0: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
54f0: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
5500: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
5510: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
5520: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
5530: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
5540: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
5550: 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65  __arm__)) && !de
5560: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
5570: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
5580: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5590: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
55a0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
55b0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
55c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
55d0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
55e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55f0: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5600: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64  ITE_UTF16LE.#end
5610: 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  if.#if (defined(
5620: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
5630: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20  ined(__ppc__))  
5640: 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65  \.    && !define
5650: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
5660: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
5670: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
5680: 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20  ORDER    4321.# 
5690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
56a0: 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64  GENDIAN    1.# d
56b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
56c0: 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65  TLEENDIAN 0.# de
56d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
56e0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
56f0: 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23  UTF16BE.#endif.#
5700: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
5710: 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  TE_BYTEORDER).# 
5720: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5730: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
5740: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
5750: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
5760: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
5770: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
5780: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
5790: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
57a0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
57b0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
57c0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
57d0: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
57e0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
57f0: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
5800: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
5810: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
5820: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
5830: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
5840: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
5850: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
5860: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
5870: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
5880: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
5890: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
58a0: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
58b0: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
58c0: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
58d0: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
58e0: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
58f0: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
5900: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
5910: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
5920: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
5930: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
5940: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20  _INT64)../* .** 
5950: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
5960: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
5970: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
5980: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
5990: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
59a0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
59b0: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
59c0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
59d0: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
59e0: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
59f0: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
5a00: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
5a10: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
5a20: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
5a30: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
5a40: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
5a50: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
5a60: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
5a70: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
5a80: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
5a90: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
5aa0: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
5ab0: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
5ac0: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
5ad0: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
5ae0: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
5af0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
5b00: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
5b10: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
5b20: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
5b30: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
5b40: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
5b50: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
5b60: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
5b70: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
5b80: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
5b90: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
5ba0: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
5bb0: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
5bc0: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
5bd0: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
5be0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
5bf0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
5c00: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
5c10: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
5c20: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
5c30: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
5c40: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
5c50: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
5c60: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
5c70: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
5c80: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
5c90: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
5ca0: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
5cb0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
5cc0: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
5cd0: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
5ce0: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
5cf0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5d00: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5d10: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
5d30: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
5d40: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
5d50: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
5d60: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
5d70: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
5d80: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
5d90: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
5da0: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
5db0: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
5dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
5dd0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
5de0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5df0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
5e00: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e10: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
5e20: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
5e30: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
5e40: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
5e50: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
5e60: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
5e70: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
5e80: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
5e90: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
5ea0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5eb0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5ec0: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
5ed0: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
5ee0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
5ef0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5f00: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
5f10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5f20: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
5f30: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
5f40: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
5f50: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
5f60: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
5f70: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
5f80: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
5f90: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
5fa0: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
5fb0: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
5fc0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
5fd0: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
5fe0: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
5ff0: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
6000: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
6010: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6020: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6030: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6040: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6050: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
6060: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6070: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
6080: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
6090: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
60a0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
60b0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
60c0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
60d0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
60e0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
60f0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6100: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6110: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
6120: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
6130: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
6140: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
6150: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
6160: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
6170: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
6180: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
6190: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
61a0: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
61b0: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
61c0: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
61d0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
61e0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
61f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
6200: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
6210: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
6220: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
6230: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
6240: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
6250: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
6260: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
6270: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6280: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6290: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
62a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
62b0: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
62c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
62d0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
62e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
62f0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
6300: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
6310: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
6320: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
6330: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
6340: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
6350: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
6360: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
6370: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6380: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
6390: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
63a0: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
63b0: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
63c0: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
63d0: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
63e0: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
63f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
6400: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
6410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
6420: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
6430: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
6440: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
6450: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
6460: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
6470: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
6480: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
6490: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
64a0: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
64b0: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
64c0: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
64d0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
64e0: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
64f0: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
6500: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
6510: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
6520: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
6530: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
6540: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6550: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
6560: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
6570: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
6580: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
6590: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
65a0: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
65b0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
65c0: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
65d0: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
65e0: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
65f0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
6600: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
6610: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
6620: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
6630: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
6640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6650: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
6660: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
6670: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
6680: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
6690: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
66a0: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
66b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
66c0: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
66d0: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
66e0: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
66f0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
6700: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
6710: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
6720: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
6730: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
6740: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
6750: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
6760: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
6770: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
6780: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
6790: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
67a0: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
67b0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
67c0: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
67d0: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
67e0: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
67f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
6800: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
6810: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
6820: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
6830: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
6840: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
6850: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
6860: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
6870: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
6880: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
6890: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
68a0: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
68b0: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
68c0: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
68d0: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
68e0: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
68f0: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a  a power of two.*
6900: 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65  /.#define IsPowe
6910: 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26  rOfTwo(X) (((X)&
6920: 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a  ((X)-1))==0)../*
6930: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
6940: 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73  g value as a des
6950: 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f  tructor means to
6960: 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72   use sqlite3DbFr
6970: 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ee()..** The sql
6980: 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75  ite3DbFree() rou
6990: 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77  tine requires tw
69a0: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73  o parameters ins
69b0: 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20  tead of the .** 
69c0: 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74 68  one parameter th
69d0: 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e  at destructors n
69e0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53  ormally want.  S
69f0: 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74  o we have to int
6a00: 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69 73 20  roduce .** this 
6a10: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
6a20: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
6a30: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
6a40: 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20  ently.  Any .** 
6a50: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
6a60: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
6a70: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
6a80: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
6a90: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
6aa0: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
6ab0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
6ac0: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
6ad0: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
6ae0: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
6af0: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
6b00: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
6b10: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
6b20: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
6b30: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
6b40: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
6b50: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
6b60: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
6b70: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
6b80: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
6b90: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
6ba0: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
6bb0: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
6bc0: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
6bd0: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
6be0: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
6bf0: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
6c00: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
6c10: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
6c20: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
6c30: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
6c40: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
6c50: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
6c60: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
6c70: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
6c80: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
6c90: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
6ca0: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
6cb0: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
6cc0: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
6cd0: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
6ce0: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
6cf0: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
6d00: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
6d10: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
6d20: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
6d30: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
6d40: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
6d50: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
6d60: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
6d70: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
6d80: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
6d90: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
6da0: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
6db0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
6dc0: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
6dd0: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
6de0: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
6df0: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
6e00: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
6e10: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
6e20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
6e30: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
6e40: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
6e50: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
6e60: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
6e70: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
6e80: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
6e90: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
6ea0: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
6eb0: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
6ec0: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
6ed0: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
6ee0: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
6ef0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
6f00: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
6f10: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
6f20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
6f30: 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  D .  #define GLO
6f40: 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65  BAL(t,v) v.  #de
6f50: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
6f60: 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  alConfig sqlite3
6f70: 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f  Config.#endif../
6f80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
6f90: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
6fa0: 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63  ed to suppress c
6fb0: 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73  ompiler warnings
6fc0: 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20   and to.** make 
6fd0: 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61  it clear to huma
6fe0: 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61  n readers when a
6ff0: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
7000: 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74  ter is deliberat
7010: 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  ely .** left unu
7020: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
7030: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
7040: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
7050: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
7060: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
7070: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
7080: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
7090: 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a   example the .**
70a0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
70b0: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
70c0: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
70d0: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
70e0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
70f0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
7100: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
7110: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
7120: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
7130: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
7140: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
7150: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
7160: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
7170: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
7180: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
7190: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
71a0: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
71b0: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
71c0: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
71d0: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
71e0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
71f0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
7200: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
7210: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
7220: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
7230: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
7240: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
7250: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
7260: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
7270: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
7280: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
7290: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
72a0: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
72b0: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
72c0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
72d0: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
72e0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
72f0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
7300: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
7310: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
7320: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
7330: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
7340: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
7350: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
7360: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
7370: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
7380: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
7390: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
73a0: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
73b0: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
73c0: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
73d0: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
73e0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
73f0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
7400: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7410: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
7420: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
7430: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
7440: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
7450: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
7460: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
7470: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
7480: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
7490: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
74a0: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
74b0: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
74c0: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
74d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
74e0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
74f0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7500: 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53  t ExprSpan ExprS
7510: 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  pan;.typedef str
7520: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
7530: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7540: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
7550: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
7560: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
7570: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
7580: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
7590: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
75a0: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
75b0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
75c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
75d0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
75e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
75f0: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
7600: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
7610: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
7620: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
7630: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
7640: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
7650: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
7660: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
7670: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7680: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
7690: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
76a0: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
76b0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
76c0: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
76d0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
76e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
76f0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
7700: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
7710: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
7720: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
7730: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
7740: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
7750: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
7760: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
7770: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
7780: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
7790: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
77a0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
77b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
77c0: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
77d0: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
77e0: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
77f0: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7800: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7810: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7820: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7830: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7840: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7850: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
7860: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7870: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
7880: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7890: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
78a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
78b0: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
78c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
78d0: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
78e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
78f0: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7900: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7910: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7920: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7930: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7940: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7950: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
7960: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
7970: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
7980: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
7990: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
79a0: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
79b0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
79c0: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
79d0: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
79e0: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
79f0: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7a00: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7a10: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7a20: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7a30: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7a40: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7a50: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
7a60: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
7a70: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
7a80: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
7a90: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
7aa0: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
7ab0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
7ac0: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
7ad0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
7ae0: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
7af0: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
7b00: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
7b10: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
7b20: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7b30: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
7b40: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
7b50: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
7b60: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
7b70: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
7b80: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
7b90: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
7ba0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
7bb0: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
7bc0: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
7bd0: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
7be0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
7bf0: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
7c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7c10: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
7c20: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
7c30: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
7c40: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
7c50: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
7c60: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
7c70: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
7c80: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
7c90: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
7ca0: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
7cb0: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
7cc0: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
7cd0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
7ce0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
7cf0: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
7d00: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
7d10: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
7d20: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
7d30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
7d40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7d50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
7d60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
7d70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
7d80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7d90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7da0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
7db0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
7dc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
7dd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
7de0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
7df0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
7e00: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
7e10: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
7e20: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
7e30: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
7e40: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
7e50: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
7e60: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
7e70: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
7e80: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
7e90: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
7ea0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
7eb0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
7ec0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
7ed0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
7ee0: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
7ef0: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
7f00: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
7f10: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
7f20: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
7f30: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
7f40: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
7f50: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
7f60: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
7f70: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
7f80: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
7f90: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
7fa0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
7fb0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7fc0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
7fd0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
7fe0: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
7ff0: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
8000: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
8010: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
8020: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
8030: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
8040: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
8050: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
8060: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
8070: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
8080: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
8090: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
80a0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
80b0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
80c0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
80d0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
80e0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
80f0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
8100: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
8110: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
8120: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
8130: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
8140: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
8150: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
8160: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
8170: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8180: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
8190: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
81a0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
81b0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
81c0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
81d0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
81e0: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
81f0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
8200: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
8210: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
8220: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
8230: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
8240: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
8250: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
8260: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
8270: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
8280: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
8290: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
82a0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
82b0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
82c0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
82d0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
82e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
82f0: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
8300: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
8310: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
8320: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
8330: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
8340: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
8350: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
8360: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
8370: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
8380: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
8390: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
83a0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
83b0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
83c0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
83d0: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
83e0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
83f0: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
8400: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
8410: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
8420: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8430: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
8440: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
8450: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
8460: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
8470: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8480: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8490: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
84a0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
84b0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
84c0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
84d0: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
84e0: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
84f0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
8500: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8510: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
8520: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
8530: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
8540: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
8550: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
8560: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
8570: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
8580: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
8590: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
85a0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
85b0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
85c0: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
85d0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
85e0: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
85f0: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
8600: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
8610: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
8620: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
8630: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
8640: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
8650: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
8660: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
8670: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
8680: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
8690: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
86a0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
86b0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
86c0: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
86d0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
86e0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
86f0: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8700: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
8710: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
8720: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
8730: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
8740: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
8750: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
8760: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
8770: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
8780: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
8790: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
87a0: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
87b0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
87c0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
87d0: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
87e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
87f0: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8800: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8810: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8820: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8830: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8840: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8850: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
8860: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
8870: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
8880: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
8890: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
88a0: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
88b0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
88c0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
88d0: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
88e0: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
88f0: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8900: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8910: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8920: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8930: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8940: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8950: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
8960: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8970: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
8980: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
8990: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
89a0: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
89b0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
89c0: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
89d0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
89e0: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
89f0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8a00: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8a10: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8a20: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8a30: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8a40: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8a50: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
8a60: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
8a70: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
8a80: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
8a90: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
8aa0: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
8ab0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8ac0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8ad0: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
8ae0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
8af0: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
8b00: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
8b10: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
8b20: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
8b30: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
8b40: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
8b50: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
8b60: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8b70: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
8b80: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
8b90: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
8ba0: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
8bb0: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
8bc0: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
8bd0: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
8be0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
8bf0: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
8c00: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
8c10: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
8c20: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8c30: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8c50: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
8c60: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
8c70: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
8c80: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
8c90: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
8ca0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
8cb0: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
8cc0: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
8cd0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
8ce0: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
8cf0: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
8d00: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
8d10: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8d20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
8d30: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
8d40: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
8d50: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
8d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
8d70: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
8d80: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
8d90: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
8da0: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
8db0: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
8dc0: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
8dd0: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
8de0: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
8df0: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
8e00: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
8e10: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
8e20: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
8e30: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
8e40: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
8e50: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
8e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
8e70: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
8e80: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
8e90: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
8ea0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
8eb0: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
8ec0: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
8ed0: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
8ee0: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
8ef0: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
8f00: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
8f10: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
8f20: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
8f30: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
8f40: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
8f50: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
8f60: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
8f70: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
8f80: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
8f90: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
8fa0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
8fb0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
8fc0: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
8fd0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
8fe0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
8ff0: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
9000: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
9010: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
9020: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
9030: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
9040: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9050: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
9060: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
9070: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
9080: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
9090: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
90a0: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
90b0: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
90c0: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
90d0: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
90e0: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
90f0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
9100: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
9110: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
9120: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
9130: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
9140: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
9150: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
9160: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
9170: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
9180: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
9190: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
91a0: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
91b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
91c0: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
91d0: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
91e0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
91f0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
9200: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
9210: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
9220: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
9230: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
9240: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
9250: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
9260: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
9270: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
9280: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
9290: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
92a0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
92b0: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
92c0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
92d0: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
92e0: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
92f0: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
9300: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
9310: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
9320: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
9330: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
9340: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
9350: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
9360: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
9370: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
9380: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
9390: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
93a0: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
93b0: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
93c0: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
93d0: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
93e0: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
93f0: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
9400: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
9410: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
9420: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
9430: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
9440: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
9450: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
9460: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
9470: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
9480: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
9490: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
94a0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
94b0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
94c0: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
94d0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
94e0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
94f0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9510: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9520: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
9530: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
9540: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9550: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9560: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9570: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9580: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
95b0: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
95c0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
95d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
95e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
95f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9600: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
9610: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
9620: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
9630: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9640: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
9650: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
9660: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
9670: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
9680: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
9690: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
96a0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
96b0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
96c0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
96d0: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
96e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
96f0: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9700: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
9710: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
9720: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
9730: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9740: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
9750: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9770: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
9780: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
9790: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
97a0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
97b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
97c0: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
97d0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
97e0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9800: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9810: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9820: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9830: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9850: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
9860: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
9870: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
9880: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
9890: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
98a0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
98b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
98c0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
98d0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
98e0: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
98f0: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9900: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9920: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9930: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9940: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9950: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9970: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
9980: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
9990: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e  tions */.  u8 en
99a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
99b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
99c0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75   encoding */.  u
99d0: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
99f0: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9a00: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9a10: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9a30: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
9a40: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
9a50: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9a70: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
9a80: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
9a90: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
9aa0: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
9ab0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
9ac0: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
9ad0: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
9ae0: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
9af0: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
9b00: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
9b10: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
9b20: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
9b30: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b50: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
9b60: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
9b70: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
9b80: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
9b90: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
9ba0: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
9bb0: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
9bc0: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
9bd0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
9be0: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
9bf0: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
9c00: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
9c10: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
9c20: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
9c30: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
9c40: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
9c50: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
9c60: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
9c70: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
9c80: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
9c90: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
9ca0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
9cb0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9cc0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
9cd0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
9ce0: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
9cf0: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
9d00: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
9d10: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
9d20: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
9d30: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
9d40: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
9d50: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
9d60: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
9d70: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
9d80: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
9d90: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
9da0: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
9db0: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
9dc0: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
9dd0: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
9de0: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
9df0: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
9e00: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
9e10: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
9e20: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
9e30: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
9e40: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
9e50: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
9e80: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
9e90: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
9ea0: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
9eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
9ec0: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
9ed0: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
9ee0: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
9ef0: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
9f00: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
9f10: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
9f20: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
9f30: 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62    u8 imposterTab
9f40: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
9f50: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
9f60: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
9f70: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
9f80: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
9f90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9fa0: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
9fb0: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
9fc0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
9fd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9fe0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
9ff0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a000: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
a010: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
a020: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a030: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a040: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a050: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
a060: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
a070: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
a080: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a090: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
a0a0: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
a0b0: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a0d0: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
a0e0: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
a0f0: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
a100: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
a110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a120: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
a130: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
a140: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
a150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a160: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
a170: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
a180: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
a190: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
a1a0: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
a1b0: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
a1c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
a1d0: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1f0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
a200: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
a210: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
a220: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
a230: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
a240: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
a250: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a260: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a280: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a290: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
a2a0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a2b0: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a2d0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
a2e0: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
a2f0: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
a300: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
a310: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
a320: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a330: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a340: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
a350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a360: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
a370: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
a380: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
a390: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
a3a0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
a3b0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a3c0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a3d0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
a3e0: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
a3f0: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
a400: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
a410: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
a420: 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51  nt64);.#ifdef SQ
a430: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
a440: 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69  PDATE_HOOK.  voi
a450: 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67  d *pPreUpdateArg
a460: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
a470: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
a480: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
a490: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ck */.  void (*x
a4a0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
a4b0: 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65  k)(   /* Registe
a4c0: 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  red using sqlite
a4d0: 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b  3_preupdate_hook
a4e0: 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c  () */.    void*,
a4f0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61  sqlite3*,int,cha
a500: 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f  r const*,char co
a510: 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nst*,sqlite3_int
a520: 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  64,sqlite3_int64
a530: 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74  .  );.  PreUpdat
a540: 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20  e *pPreUpdate;  
a550: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a560: 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d   for active pre-
a570: 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20  update callback 
a580: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
a590: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
a5a0: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66  DATE_HOOK */.#if
a5b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a5c0: 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61  _WAL.  int (*xWa
a5d0: 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20  lCallback)(void 
a5e0: 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  *, sqlite3 *, co
a5f0: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
a600: 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72  ;.  void *pWalAr
a610: 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  g;.#endif.  void
a620: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76  (*xCollNeeded)(v
a630: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
a640: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
a650: 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28   char*);.  void(
a660: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28  *xCollNeeded16)(
a670: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
a680: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
a690: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
a6a0: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
a6b0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a6c0: 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20  e *pErr;        
a6d0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
a6e0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
a6f0: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
a700: 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49  volatile int isI
a710: 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54  nterrupted; /* T
a720: 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  rue if sqlite3_i
a730: 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65  nterrupt has bee
a740: 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20  n called */.    
a750: 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b  double notUsed1;
a760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a770: 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b  pacer */.  } u1;
a780: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f  .  Lookaside loo
a790: 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
a7a0: 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61   /* Lookaside ma
a7b0: 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69  lloc configurati
a7c0: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
a7d0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
a7e0: 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  IZATION.  sqlite
a7f0: 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20  3_xauth xAuth;  
a800: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
a810: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
a820: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a830: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
a840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
a850: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
a860: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
a870: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
a880: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
a890: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
a8a0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
a8b0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
a8c0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
a8d0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
a8e0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
a8f0: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
a900: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a910: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
a920: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e  callback */.  un
a930: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
a940: 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Ops;        /* N
a950: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
a960: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
a970: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
a980: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a990: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
a9a0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9c0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
a9d0: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
a9e0: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
a9f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
aa00: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
aa10: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
aa20: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
aa30: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
aa40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
aa50: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
aa60: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
aa70: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
aa80: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
aa90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
aaa0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
aab0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
aac0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
aad0: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
aae0: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
aaf0: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
ab00: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
ab10: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
ab20: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
ab30: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
ab40: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
ab50: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
ab60: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
ab70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ab80: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
ab90: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
aba0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
abb0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
abc0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
abd0: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
abe0: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
abf0: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
ac00: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
ac10: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
ac20: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
ac30: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
ac40: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
ac50: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
ac60: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
ac70: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
ac80: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
ac90: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
aca0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
acb0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
acc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
acd0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
ace0: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
acf0: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
ad00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
ad20: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
ad30: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
ad40: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
ad50: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
ad60: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
ad70: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
ad80: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
ad90: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
ada0: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
adb0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
adc0: 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72  immediate constr
add0: 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a  aints */.  int *
ade0: 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20  pnBytesFreed;   
adf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
ae00: 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65  ot NULL, increme
ae10: 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65  nt this in DbFre
ae20: 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  e() */.#ifdef SQ
ae30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
ae40: 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54  CK_NOTIFY.  /* T
ae50: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
ae60: 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70  iables are all p
ae70: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
ae80: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20  STATIC_MASTER . 
ae90: 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62   ** mutex, not b
aea0: 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e  y sqlite3.mutex.
aeb0: 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62   They are used b
aec0: 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79  y code in notify
aed0: 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  .c. .  **.  ** W
aee0: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
aef0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
af00: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
af10: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
af20: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
af30: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
af40: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
af50: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
af60: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
af70: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
af80: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
af90: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
afa0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
afb0: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
afc0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
afd0: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
afe0: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
aff0: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
b000: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
b010: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
b020: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
b030: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
b040: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
b050: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
b060: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
b070: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
b080: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
b090: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
b0c0: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
b0d0: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
b0e0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
b0f0: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
b100: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
b110: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
b120: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
b130: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
b140: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
b150: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
b160: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
b170: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b180: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b190: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
b1a0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
b1b0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b1c0: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
b1d0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
b1e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
b1f0: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
b200: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
b210: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
b220: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
b230: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
b240: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
b250: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
b260: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
b270: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
b280: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
b290: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
b2a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b2b0: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
b2c0: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
b2d0: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
b2e0: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
b2f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
b300: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
b310: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
b320: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
b330: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
b340: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
b350: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
b360: 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66  000004  /* Use f
b370: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
b380: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
b390: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
b3a0: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
b3b0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
b3c0: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
b3d0: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
b3e0: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
b3f0: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
b400: 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  10  /* OK to spi
b410: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
b420: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b430: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
b440: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53  0x00000020  /* S
b450: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
b460: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
b470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b480: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
b490: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
b4a0: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
b4b0: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
b4c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
b4d0: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
b4e0: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
b4f0: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
b500: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b530: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
b540: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
b550: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b580: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
b590: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
b5a0: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
b5b0: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
b5c0: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
b5d0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
b5e0: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
b5f0: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
b630: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
b640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
b650: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
b660: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
b670: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
b680: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
b690: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
b6a0: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
b6b0: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
b6c0: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
b6d0: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
b6e0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
b6f0: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
b700: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
b710: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
b720: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
b730: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
b740: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
b750: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
b760: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
b770: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
b780: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
b790: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
b7a0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
b7b0: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
b7c0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
b7d0: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
b7e0: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
b7f0: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
b800: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
b810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
b820: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
b830: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
b840: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
b850: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
b860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
b870: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
b880: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
b890: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
b8a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b8b0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
b8c0: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
b8d0: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
b8e0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
b8f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
b900: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
b910: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
b920: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
b930: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
b940: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
b950: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
b960: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
b970: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
b980: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
b990: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
b9a0: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
b9b0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
b9c0: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
b9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9e0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
b9f0: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
ba00: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
ba10: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
ba20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
ba30: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
ba40: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
ba50: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
ba60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba70: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
ba80: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
ba90: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
baa0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
bab0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
bac0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
bad0: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
bae0: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
baf0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bb00: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
bb10: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
bb20: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
bb30: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
bb40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
bb50: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
bb60: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
bb70: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
bb80: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
bb90: 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20  QLITE_Vacuum    
bba0: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
bbb0: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
bbc0: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
bbd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
bbe0: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31 30 30  SizeCk     0x100
bbf0: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
bc00: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
bc10: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a 2f 2a   on load */.../*
bc20: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
bc30: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
bc40: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
bc50: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
bc60: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
bc70: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
bc80: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
bc90: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
bca0: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
bcb0: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
bcc0: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
bcd0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
bce0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
bcf0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
bd00: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
bd10: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
bd20: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
bd30: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
bd40: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
bd50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
bd60: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
bd70: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
bd80: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
bd90: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
bda0: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
bdb0: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
bdc0: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
bdd0: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
bde0: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
bdf0: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
be00: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
be10: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
be20: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
be30: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
be40: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
be50: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
be60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
be70: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
be80: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
be90: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
bea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
beb0: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
bec0: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
bed0: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
bee0: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
bef0: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
bf00: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
bf10: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
bf20: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
bf30: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
bf40: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
bf50: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
bf60: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
bf70: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
bf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
bf90: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
bfa0: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
bfb0: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
bfc0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
bfd0: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
bfe0: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
bff0: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
c000: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
c010: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
c020: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
c030: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
c040: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
c050: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
c060: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
c070: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
c080: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
c090: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
c0a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c0b0: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
c0c0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c0d0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c0e0: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
c0f0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
c100: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
c110: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
c120: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
c130: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
c140: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
c150: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
c160: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
c170: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
c180: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c190: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
c1a0: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
c1b0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
c1c0: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
c1d0: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
c1e0: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
c1f0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
c200: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
c210: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
c220: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
c230: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
c240: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
c250: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
c260: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
c270: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c280: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
c290: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
c2a0: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
c2b0: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
c2c0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
c2d0: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
c2e0: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
c2f0: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
c300: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
c310: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
c320: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
c330: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
c340: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
c350: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
c360: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
c370: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
c380: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
c390: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
c3a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
c3b0: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
c3c0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
c3d0: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
c3e0: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
c3f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
c400: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
c410: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
c420: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
c430: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c440: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
c450: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
c460: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
c470: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
c480: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c490: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
c4a0: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
c4b0: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
c4c0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
c4d0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
c4e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
c4f0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
c500: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
c510: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
c520: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
c530: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
c540: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
c550: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
c560: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
c570: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
c580: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
c590: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
c5a0: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
c5b0: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
c5c0: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
c5d0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
c5e0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
c5f0: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
c600: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c610: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
c620: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
c630: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
c640: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
c650: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
c660: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
c670: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
c680: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
c690: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
c6a0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
c6b0: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
c6c0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
c6d0: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
c6e0: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
c6f0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
c700: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
c710: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
c720: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c730: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
c740: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
c750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
c760: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
c770: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
c780: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
c790: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c7b0: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
c7c0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
c7d0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
c7e0: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
c7f0: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
c800: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
c810: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
c820: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
c830: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
c840: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
c850: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
c860: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
c870: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
c880: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
c890: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
c8a0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
c8b0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
c8c0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
c8d0: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
c8e0: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
c8f0: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
c900: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
c910: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
c920: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
c930: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
c940: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
c950: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
c960: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
c970: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
c980: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
c990: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
c9a0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
c9b0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
c9c0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
c9d0: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
c9e0: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
c9f0: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
ca00: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
ca10: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
ca20: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
ca30: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
ca40: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
ca50: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
ca60: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
ca70: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
ca80: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
ca90: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
caa0: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
cab0: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
cac0: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
cad0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
cae0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
caf0: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
cb00: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
cb10: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
cb20: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
cb30: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
cb40: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
cb50: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
cb60: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
cb70: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
cb80: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
cb90: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
cba0: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
cbb0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
cbc0: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
cbd0: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
cbe0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
cbf0: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
cc00: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
cc10: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
cc20: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
cc30: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
cc40: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
cc50: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
cc60: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
cc70: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
cc80: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
cc90: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
cca0: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
ccb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ccc0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
ccd0: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
cce0: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
ccf0: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
cd00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cd10: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
cd20: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
cd30: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
cd40: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
cd50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
cd60: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
cd70: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
cd80: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
cd90: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
cda0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
cdb0: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
cdc0: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
cdd0: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
cde0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
cdf0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
ce00: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
ce10: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
ce20: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
ce30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ce40: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
ce50: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
ce60: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
ce70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ce80: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
ce90: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
cea0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
ceb0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
cec0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ced0: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
cee0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
cef0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
cf00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
cf10: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
cf20: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
cf30: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
cf40: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
cf50: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
cf60: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
cf70: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
cf80: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
cf90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
cfa0: 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a  ONSTANT 0x800 /*
cfb0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
cfc0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
cfd0: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
cfe0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
cff0: 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f 2a  INMAX  0x1000 /*
d000: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
d010: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
d020: 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ates */../*.** T
d030: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
d040: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
d050: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
d060: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
d070: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
d080: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
d090: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
d0a0: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
d0b0: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
d0c0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
d0d0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
d0e0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
d0f0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
d100: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
d110: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
d120: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
d130: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
d140: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
d150: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
d160: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
d170: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
d180: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
d190: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
d1a0: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
d1b0: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
d1c0: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
d1d0: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
d1e0: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
d1f0: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20  unction. If .** 
d200: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
d210: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
d220: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
d230: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
d240: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
d250: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d260: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d270: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
d280: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
d290: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
d2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d2b0: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
d2c0: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
d2d0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d2e0: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
d2f0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
d300: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
d310: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
d320: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
d330: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
d340: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
d350: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
d360: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
d370: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
d380: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
d390: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
d3a0: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
d3b0: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
d3c0: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
d3d0: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
d3e0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
d3f0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
d400: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
d410: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
d420: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
d430: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
d440: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
d450: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
d460: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
d470: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
d480: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
d490: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
d4a0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
d4b0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d4c0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
d4d0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
d4e0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
d4f0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
d500: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
d510: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
d520: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
d530: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
d540: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
d550: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
d560: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
d570: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
d580: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
d590: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
d5a0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
d5b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d5c0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d5d0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d5e0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d5f0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d600: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d610: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d620: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d630: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d640: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d650: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d660: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
d670: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d680: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d690: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d6a0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d6b0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d6c0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d6d0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
d6e0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d6f0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
d700: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
d710: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d720: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d730: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d740: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d750: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
d760: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d770: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d780: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d790: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
d7a0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d7b0: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
d7c0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
d7d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d7e0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d7f0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d800: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d810: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
d820: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d830: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
d840: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
d850: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
d860: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d870: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
d880: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
d890: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
d8a0: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
d8b0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d8c0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
d8d0: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
d8e0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d8f0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
d900: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d910: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
d920: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
d930: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d940: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
d950: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
d960: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66  #zName,0,0}.#def
d970: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
d980: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
d990: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
d9a0: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
d9b0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d9c0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
d9d0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d9e0: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
d9f0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
da00: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
da10: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
da20: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
da30: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
da40: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
da50: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
da60: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
da70: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
da80: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
da90: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
daa0: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
dab0: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
dac0: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
dad0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
dae0: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
daf0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
db00: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
db10: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
db20: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
db30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
db60: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
db70: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
db80: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dba0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
dbb0: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
dbc0: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
dbd0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dbf0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
dc00: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
dc10: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
dc20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dc30: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
dc40: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
dc50: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
dc60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
dc70: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
dc80: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
dc90: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
dca0: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
dcb0: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
dcc0: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
dcd0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
dce0: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
dcf0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
dd00: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
dd10: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
dd20: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
dd30: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
dd40: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
dd50: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
dd60: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
dd70: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
dd80: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
dd90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
dda0: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
ddb0: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
ddc0: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
ddd0: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
dde0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
ddf0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
de00: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
de10: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
de20: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
de30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
de40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
de50: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
de60: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
de70: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
de80: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
deb0: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
dec0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
ded0: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
def0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
df00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
df10: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
df20: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
df30: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
df40: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
df50: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
df60: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
df70: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
df80: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
df90: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
dfa0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
dfb0: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
dfc0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
dfd0: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
dfe0: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
dff0: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
e000: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
e010: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
e020: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
e030: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
e040: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
e050: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
e060: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
e070: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
e080: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
e090: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
e0a0: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
e0b0: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
e0c0: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
e0d0: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
e0e0: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
e0f0: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
e100: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
e110: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
e120: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
e130: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
e140: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
e150: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
e160: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
e170: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
e180: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
e190: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
e1a0: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
e1b0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
e1c0: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
e1d0: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
e1e0: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
e1f0: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
e200: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
e210: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
e220: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
e230: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
e240: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
e250: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
e260: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
e270: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
e280: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
e290: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
e2a0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
e2b0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
e2c0: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
e2d0: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
e2e0: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
e2f0: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
e300: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
e310: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
e320: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
e330: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
e340: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
e350: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
e360: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
e370: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
e380: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
e390: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
e3a0: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
e3b0: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
e3c0: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
e3d0: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
e3e0: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
e3f0: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
e400: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
e410: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
e420: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e430: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
e440: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e460: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
e470: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
e480: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
e490: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
e4a0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
e4b0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
e4c0: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
e4d0: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
e4e0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
e4f0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
e500: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
e510: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
e520: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
e530: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
e540: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
e550: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
e560: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
e570: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
e580: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
e590: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
e5a0: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
e5b0: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
e5c0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
e5d0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
e5e0: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
e5f0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
e600: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
e610: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
e620: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
e630: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
e640: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
e650: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
e660: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
e670: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
e680: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
e690: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
e6a0: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
e6b0: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
e6c0: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
e6d0: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
e6e0: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
e6f0: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
e700: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
e710: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
e720: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
e730: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
e740: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
e750: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
e760: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
e770: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
e780: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
e790: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
e7a0: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
e7b0: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
e7c0: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
e7d0: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
e7e0: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
e7f0: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
e800: 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
e810: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
e820: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e830: 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
e860: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e870: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
e880: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e890: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
e8a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e8b0: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
e8c0: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
e8d0: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
e8e0: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
e8f0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
e900: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
e910: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
e920: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
e930: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
e940: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
e950: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
e960: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
e970: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
e980: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
e990: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
e9a0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
e9b0: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
e9c0: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
e9d0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
e9e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e9f0: 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
ea00: 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
ea10: 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
ea20: 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
ea30: 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
ea40: 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
ea50: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
ea60: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
ea70: 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
ea80: 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
ea90: 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
eaa0: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
eab0: 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
eac0: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
ead0: 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
eae0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
eaf0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
eb00: 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
eb10: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
eb20: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
eb30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
eb40: 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
eb50: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
eb60: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
eb70: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
eb80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
eb90: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
eba0: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
ebb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
ebc0: 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
ebd0: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
ebe0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
ebf0: 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
ec00: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
ec10: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
ec20: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
ec30: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
ec40: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
ec50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
ec60: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
ec70: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
ec80: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
ec90: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
eca0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
ecb0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
ecc0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ecd0: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
ece0: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
ecf0: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
ed00: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
ed10: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
ed20: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
ed30: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
ed40: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
ed50: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
ed60: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
ed70: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
ed80: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
ed90: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
eda0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
edb0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
edc0: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
edd0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
ede0: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
edf0: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
ee00: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
ee10: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
ee20: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
ee30: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ee40: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
ee50: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
ee60: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
ee70: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
ee80: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
ee90: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
eea0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
eeb0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
eec0: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
eed0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
eee0: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
eef0: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
ef00: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ef10: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ef20: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
ef30: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
ef40: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
ef50: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
ef60: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
ef70: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
ef80: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
ef90: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
efa0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
efb0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
efc0: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
efd0: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
efe0: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
eff0: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
f000: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
f010: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
f020: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
f030: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
f040: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
f050: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
f060: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
f070: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
f080: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
f090: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
f0a0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
f0b0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
f0c0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
f0d0: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
f0e0: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
f0f0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
f100: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
f110: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
f120: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
f130: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
f140: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
f150: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
f160: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
f170: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
f180: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
f190: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
f1a0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
f1b0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
f1c0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
f1d0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
f1e0: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
f1f0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
f200: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
f210: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
f220: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
f230: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
f240: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
f250: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
f260: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
f270: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
f280: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
f290: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
f2a0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
f2b0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
f2c0: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
f2d0: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
f2e0: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
f2f0: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
f300: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
f310: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
f320: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
f330: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
f340: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
f350: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
f360: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
f370: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
f380: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
f390: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
f3a0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
f3b0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
f3c0: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
f3d0: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
f3e0: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
f3f0: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
f400: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
f410: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
f420: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
f430: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
f440: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
f450: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
f460: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
f470: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
f480: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
f490: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
f4a0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
f4b0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
f4c0: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
f4d0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
f4e0: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
f4f0: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
f500: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
f510: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
f520: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
f530: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
f540: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
f550: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
f560: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
f570: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
f580: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
f590: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
f5a0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f5c0: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
f5d0: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
f5e0: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
f5f0: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
f600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f610: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
f620: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f630: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
f640: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
f650: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
f660: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
f670: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
f680: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f690: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
f6a0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
f6b0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
f6c0: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
f6d0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
f6e0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
f6f0: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
f700: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
f710: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
f720: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
f730: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
f740: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
f750: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
f760: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
f770: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
f780: 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  /*.** The schema
f790: 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61   for each SQL ta
f7a0: 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20  ble and view is 
f7b0: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f7c0: 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69  emory.** by an i
f7d0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f7e0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
f7f0: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  re..*/.struct Ta
f800: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
f810: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
f820: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
f830: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
f840: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
f850: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
f860: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
f870: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
f880: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
f890: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
f8a0: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
f8b0: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
f8c0: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
f8d0: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
f8e0: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
f8f0: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
f900: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
f910: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
f920: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
f930: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
f940: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
f950: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
f960: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
f970: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
f980: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
f990: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
f9a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
f9b0: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
f9c0: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
f9d0: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
f9e0: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
f9f0: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
fa00: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
fa10: 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
fa20: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36  s table */.  i16
fa30: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
fa40: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
fa50: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
fa60: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
fa70: 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
fa80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fa90: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
faa0: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
fab0: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
fac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
fad0: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
fae0: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
faf0: 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
fb00: 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
fb10: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
fb20: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
fb30: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
fb40: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
fb50: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
fb60: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
fb70: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
fb80: 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
fb90: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
fba0: 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
fbb0: 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
fbc0: 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
fbd0: 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
fbe0: 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
fbf0: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
fc00: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
fc10: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
fc20: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
fc30: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
fc40: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
fc50: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
fc60: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
fc70: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
fc80: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
fc90: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
fca0: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
fcb0: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
fcc0: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
fcd0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
fce0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
fcf0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fd00: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
fd10: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
fd20: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
fd30: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
fd40: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
fd50: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
fd60: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
fd70: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
fd80: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
fd90: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
fda0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
fdb0: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
fdc0: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
fdd0: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
fde0: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
fdf0: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
fe00: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
fe10: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
fe20: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
fe30: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
fe40: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
fe50: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
fe60: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
fe70: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
fe80: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
fe90: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
fea0: 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
feb0: 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
fec0: 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 76 69  en applies to vi
fed0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 68 61  rtual tables tha
fee0: 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
fef0: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
ff00: 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
ff10: 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
ff20: 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
ff30: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
ff40: 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
ff50: 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
ff60: 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
ff70: 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
ff80: 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
ff90: 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
ffa0: 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
ffb0: 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
ffc0: 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
ffd0: 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
ffe0: 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
fff0: 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
10000 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
10010 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
10020 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
10030 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
10040 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
10050 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10060 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
10070 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
10080 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
10090 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
100a0 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
100b0 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
100c0 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
100d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
100e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
100f0 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
10100 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
10110 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
10120 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
10130 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
10140 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
10150 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
10160 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
10170 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
10180 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
10190 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
101a0 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
101b0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
101c0 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
101d0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
101e0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
101f0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
10200 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
10210 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
10220 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
10230 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
10240 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
10250 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
10260 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
10270 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
10280 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
10290 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
102a0 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
102b0 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
102c0 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
102d0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
102e0 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
102f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10300 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
10310 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10320 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
10330 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10340 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
10350 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
10360 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
10370 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
10380 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
10390 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
103a0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
103b0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
103c0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
103d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73  .#endif../* Does
103e0 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
103f0 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
10400 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
10410 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
10420 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
10430 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e  owid)==0).#defin
10440 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58  e VisibleRowid(X
10450 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67  ) (((X)->tabFlag
10460 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  s & TF_NoVisible
10470 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
10480 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
10490 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
104a0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
104b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
104c0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
104d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
104e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
104f0 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
10500 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
10510 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
10520 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
10530 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10540 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
10550 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
10560 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
10570 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
10580 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
10590 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
105a0 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
105b0 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
105c0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
105d0 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
105e0 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
105f0 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
10600 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
10610 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
10620 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
10630 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
10640 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
10650 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
10660 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
10670 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
10680 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
10690 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
106a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
106b0 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
106c0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
106d0 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
106e0 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
106f0 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
10700 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
10710 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
10720 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
10730 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
10740 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
10750 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
10760 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
10770 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
10780 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
10790 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
107a0 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
107b0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
107c0 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
107d0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
107e0 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
107f0 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
10800 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
10810 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
10820 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
10830 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
10840 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
10850 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
10860 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
10870 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
10880 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
10890 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
108a0 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
108b0 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
108c0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
108d0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
108e0 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
108f0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
10900 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
10910 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
10920 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
10930 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
10940 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
10950 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10960 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
10970 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
10980 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
10990 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
109a0 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
109b0 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
109c0 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
109d0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
109e0 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
109f0 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
10a00 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
10a10 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
10a20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10a30 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
10a40 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
10a50 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
10a60 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
10a70 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
10a80 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
10a90 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
10aa0 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
10ab0 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
10ac0 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
10ad0 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
10ae0 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
10af0 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
10b00 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
10b10 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
10b20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
10b30 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
10b40 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
10b50 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
10b60 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
10b70 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
10b80 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
10b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
10ba0 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
10bb0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
10bc0 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
10bd0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
10be0 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
10bf0 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
10c00 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
10c10 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
10c20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
10c30 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
10c40 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
10c50 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
10c60 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
10c70 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
10c80 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
10c90 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
10ca0 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
10cb0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
10cc0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
10cd0 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
10ce0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
10cf0 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
10d00 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
10d10 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
10d20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
10d30 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
10d40 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
10d50 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
10d60 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
10d70 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
10d80 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
10d90 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
10da0 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
10db0 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
10dc0 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
10dd0 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
10de0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
10df0 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
10e00 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
10e10 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
10e20 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
10e30 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
10e40 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
10e50 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
10e60 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
10e70 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
10e80 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
10e90 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
10ea0 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
10eb0 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
10ec0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
10ed0 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
10ee0 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
10ef0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
10f00 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
10f10 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
10f20 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
10f30 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
10f40 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
10f50 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
10f60 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
10f70 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
10f80 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
10f90 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
10fa0 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
10fb0 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
10fc0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
10fd0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
10fe0 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
10ff0 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
11000 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
11010 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
11020 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
11030 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
11040 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
11050 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
11060 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
11070 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
11080 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
11090 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
110a0 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
110b0 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
110c0 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
110d0 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
110e0 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
110f0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
11100 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
11110 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
11120 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
11130 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
11140 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
11150 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
11160 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
11170 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
11180 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
11190 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
111a0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
111b0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
111c0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
111d0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
111e0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
111f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
11200 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
11210 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
11220 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
11230 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
11240 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
11250 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
11260 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
11270 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
11280 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
11290 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
112a0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
112b0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
112c0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
112d0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
112e0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
112f0 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
11300 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
11310 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
11320 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
11330 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
11340 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
11350 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
11360 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
11370 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
11380 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
11390 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
113a0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
113b0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
113c0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
113d0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
113e0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
113f0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11400 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
11410 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
11420 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
11430 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11440 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
11450 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
11460 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
11470 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
11480 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
11490 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
114a0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
114b0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
114c0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
114d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
114e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
114f0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
11500 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
11510 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
11520 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
11530 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
11540 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
11550 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
11560 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
11570 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
11580 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
11590 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
115a0 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
115b0 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
115c0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
115d0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
115e0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
115f0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
11600 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
11610 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
11620 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
11630 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
11640 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
11650 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
11660 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
11670 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
11680 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
11690 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
116a0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
116b0 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
116c0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
116d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
116e0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
116f0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
11700 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
11710 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
11720 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
11730 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
11740 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
11750 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
11760 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11770 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
11780 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
11790 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
117a0 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
117b0 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
117c0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
117d0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
117e0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
117f0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
11800 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11810 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11820 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
11830 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
11840 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
11850 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
11860 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
11870 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
11880 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
11890 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
118a0 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
118b0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
118c0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
118d0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
118e0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
118f0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
11900 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
11910 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
11920 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
11930 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
11940 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
11950 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
11960 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
11970 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
11980 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
11990 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
119a0 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
119b0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
119c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
119d0 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
119e0 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
119f0 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
11a00 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
11a10 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
11a20 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
11a30 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61   r2 member varia
11a40 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
11a50 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69  ed by the optimi
11a60 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  zed comparison.*
11a70 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65  * functions vdbe
11a80 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74  RecordCompareInt
11a90 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72  () and vdbeRecor
11aa0 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29  dCompareString()
11ab0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
11ac0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
11ad0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11ae0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
11af0 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
11b00 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
11b10 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
11b20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11b30 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
11b40 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
11b50 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
11b60 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
11b70 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
11b80 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
11b90 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
11ba0 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
11bb0 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
11bc0 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
11bd0 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  EM) */.  Mem *aM
11be0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
11bf0 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  Values */.  int 
11c00 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
11c10 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11c20 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
11c30 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20  ) */.  int r2;  
11c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
11c50 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
11c60 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a   (rhs < lhs) */.
11c70 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  };.../*.** Each 
11c80 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
11c90 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
11ca0 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
11cb0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11cc0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11cd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
11ce0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
11cf0 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
11d00 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
11d10 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
11d20 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
11d30 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
11d40 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
11d50 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
11d60 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
11d70 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
11d80 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
11d90 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
11da0 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
11db0 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
11dc0 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
11dd0 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
11de0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
11df0 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
11e00 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
11e10 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
11e20 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
11e30 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
11e40 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
11e50 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
11e60 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
11e70 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
11e80 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
11e90 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
11ea0 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
11eb0 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
11ec0 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
11ed0 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
11ee0 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
11ef0 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
11f00 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
11f10 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
11f20 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
11f30 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
11f40 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
11f50 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
11f60 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
11f70 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
11f80 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
11f90 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
11fa0 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
11fb0 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
11fc0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
11fd0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
11fe0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
11ff0 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
12000 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
12010 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
12020 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
12030 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
12040 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
12050 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
12060 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
12070 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
12080 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
12090 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
120a0 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
120b0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
120c0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
120d0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
120e0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
120f0 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
12100 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
12110 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
12120 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
12130 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
12140 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
12150 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
12160 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
12170 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
12180 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
12190 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
121a0 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
121b0 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
121c0 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
121d0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
121e0 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
121f0 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
12200 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
12210 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
12220 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
12230 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
12240 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
12250 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
12260 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
12270 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
12280 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
12290 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
122a0 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
122b0 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
122c0 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
122d0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
122e0 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
122f0 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
12300 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
12310 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
12320 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
12330 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
12350 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
12360 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
12370 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
12380 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
12390 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
123a0 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
123b0 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
123c0 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
123d0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
123e0 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
123f0 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
12400 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
12410 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
12420 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
12430 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
12440 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
12450 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
12460 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
12470 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
12480 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12490 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
124a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
124b0 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
124c0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
124d0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
124e0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
124f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
12500 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
12510 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
12520 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
12530 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
12540 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
12550 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
12560 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
12570 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
12580 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
12590 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
125a0 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
125b0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
125c0 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
125d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
125e0 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
125f0 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
12620 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12630 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
12640 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
12650 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
12660 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
12670 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
12680 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
12690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
126a0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
126b0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
126c0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
126d0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
126e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
126f0 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12700 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
12710 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
12720 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12730 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
12740 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
12750 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
12760 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
12770 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
12780 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
12790 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
127a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
127b0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
127c0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
127d0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
127e0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
127f0 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12800 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12810 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12820 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12830 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
12840 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
12850 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
12860 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
12870 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
12880 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
12890 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
128a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
128b0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
128c0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
128d0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
128e0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
128f0 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12900 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12910 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12920 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12930 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12950 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
12960 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
12970 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
12980 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
12990 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
129a0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
129b0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
129c0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
129d0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
129e0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
129f0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12a00 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12a10 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12a20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12a30 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12a40 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12a50 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
12a60 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12a70 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
12a80 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12a90 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12aa0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
12ab0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
12ac0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12ad0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
12ae0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
12af0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12b00 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
12b10 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12b20 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
12b30 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
12b40 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
12b50 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
12b60 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
12b70 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
12b80 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
12b90 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
12ba0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
12bb0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12bc0 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
12bd0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
12be0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
12bf0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
12c00 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12c10 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
12c20 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12c30 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
12c40 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
12c50 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
12c60 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
12c70 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
12c80 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
12c90 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
12ca0 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
12cb0 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
12cc0 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
12cd0 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  None)../*.** Eac
12ce0 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
12cf0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
12d00 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
12d10 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12d20 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
12d30 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
12d40 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
12d50 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
12d60 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
12d70 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
12d80 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
12d90 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
12da0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
12db0 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
12dc0 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
12dd0 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
12de0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
12df0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
12e00 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
12e10 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
12e20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
12e30 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
12e40 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
12e50 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
12e60 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
12e70 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
12e80 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
12e90 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
12ea0 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
12eb0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
12ec0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
12ed0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
12ee0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
12ef0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
12f00 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
12f10 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
12f20 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
12f30 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
12f40 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
12f50 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
12f60 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
12f70 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
12f80 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
12f90 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
12fa0 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
12fb0 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
12fc0 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
12fd0 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
12fe0 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
12ff0 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
13000 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
13010 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
13020 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
13030 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
13040 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
13050 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13060 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
13070 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
13080 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
13090 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
130a0 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
130b0 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
130c0 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
130d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
130e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
130f0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
13100 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
13110 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13120 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
13130 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
13140 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
13150 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
13160 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
13170 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
13180 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
13190 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
131a0 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
131b0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
131c0 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
131d0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
131e0 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
131f0 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
13200 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
13210 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
13220 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13230 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
13240 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
13250 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
13260 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
13270 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
13280 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
13290 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
132a0 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
132b0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
132c0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
132d0 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
132e0 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
132f0 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
13300 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
13310 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
13320 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
13330 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
13340 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
13350 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
13360 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
13370 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
13380 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
133b0 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
133c0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
133d0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
133e0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
133f0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
13400 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
13410 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13420 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
13450 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13460 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
13470 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
13480 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
13490 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
134a0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
134b0 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
134c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
134d0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
134e0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
134f0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
13500 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
13510 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
13520 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
13530 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
13540 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
13550 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
13560 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
13570 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
13580 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
13590 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
135a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
135b0 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
135c0 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
135d0 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
135e0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
135f0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13610 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
13620 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13640 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
13650 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
13660 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
13670 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
13680 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
13690 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
136a0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
136b0 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
136c0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
136d0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
136e0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
136f0 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
13700 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
13710 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
13720 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
13730 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
13740 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
13750 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13760 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
13770 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
13780 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
13790 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
137a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
137b0 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
137c0 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
137d0 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
137e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
137f0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
13800 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13810 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
13840 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
13850 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
13860 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
13890 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
138a0 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
138b0 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
138c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
138d0 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
138e0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
138f0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
13900 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
13910 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
13920 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
13930 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13940 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13950 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
13960 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
13970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13980 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13990 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
139a0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
139b0 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
139c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
139d0 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
139e0 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
139f0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
13a00 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
13a10 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
13a20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13a30 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
13a40 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
13a50 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
13a60 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
13a70 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
13a80 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
13a90 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
13aa0 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
13ab0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13ac0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
13ad0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
13ae0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
13af0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
13b00 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
13b10 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
13b20 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
13b30 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
13b40 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
13b50 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
13b60 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
13b70 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
13b80 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13b90 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
13ba0 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
13bb0 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
13bc0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
13bd0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
13be0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
13bf0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
13c00 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13c10 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
13c20 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
13c30 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
13c40 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
13c50 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
13c60 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
13c70 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13c80 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
13c90 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
13ca0 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
13cb0 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
13cc0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
13cd0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
13ce0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
13cf0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
13d00 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
13d10 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
13d20 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
13d30 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
13d40 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
13d50 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
13d60 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
13d70 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
13d80 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
13d90 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
13da0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
13db0 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
13dc0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
13dd0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
13de0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
13df0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
13e00 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
13e10 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
13e20 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
13e30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
13e40 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
13e50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13e60 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
13e70 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
13e80 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
13e90 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
13ea0 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
13eb0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
13ec0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
13ed0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
13ee0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
13ef0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
13f00 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
13f10 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13f20 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
13f30 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
13f40 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
13f50 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13f60 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
13f70 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
13f80 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13f90 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
13fa0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
13fb0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
13fc0 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
13fd0 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
13fe0 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
13ff0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
14000 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
14010 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
14020 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
14030 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
14040 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
14050 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
14060 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14070 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
14080 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
14090 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
140a0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
140b0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
140c0 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
140d0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
140e0 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
140f0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
14100 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
14110 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
14120 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
14130 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
14140 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
14150 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
14160 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
14170 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14180 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
14190 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
141a0 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
141b0 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
141c0 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
141d0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
141e0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
141f0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
14200 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
14210 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
14220 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
14230 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
14240 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
14250 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
14260 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14270 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
14280 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
14290 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
142a0 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
142b0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
142c0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
142d0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
142e0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
142f0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
14300 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
14310 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
14320 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
14330 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
14340 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
14350 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
14360 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
14370 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
14380 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
14390 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
143a0 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
143b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
143c0 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
143d0 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
143e0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
143f0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
14400 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
14410 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
14420 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
14430 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
14440 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
14450 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
14460 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14470 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
14480 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
14490 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
144a0 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
144b0 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
144c0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
144d0 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
144e0 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
144f0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
14500 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
14510 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
14520 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
14530 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
14540 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
14550 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
14560 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
14570 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
14580 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
14590 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
145a0 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
145b0 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
145c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
145d0 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
145e0 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
145f0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
14600 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
14610 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
14620 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
14630 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
14640 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
14650 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
14660 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
14670 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
14680 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
14690 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
146a0 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
146b0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
146c0 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
146d0 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
146e0 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
146f0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
14700 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
14710 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
14720 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
14730 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
14740 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
14750 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
14760 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
14770 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
14780 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
14790 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
147a0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
147b0 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
147c0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
147d0 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
147e0 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
147f0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
14800 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
14810 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
14820 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
14830 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
14840 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
14850 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
14860 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
14870 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
14880 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
14890 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
148a0 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
148b0 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
148c0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
148d0 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
148e0 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
148f0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
14900 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
14910 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
14920 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
14930 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
14940 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
14950 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
14960 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
14970 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
149a0 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
149b0 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
149c0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
149d0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
149e0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
149f0 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
14a00 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
14a10 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
14a20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
14a30 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
14a40 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
14a50 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
14a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
14a70 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
14a80 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
14a90 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
14aa0 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
14ab0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
14ac0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
14ad0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
14ae0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
14af0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
14b00 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
14b10 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
14b20 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
14b30 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
14b40 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
14b50 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
14b60 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14b70 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14b80 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14b90 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14ba0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14bb0 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
14bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
14c00 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
14c10 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
14c20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
14c30 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
14c40 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
14c50 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
14c60 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
14c70 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
14c80 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
14c90 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
14ca0 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
14cb0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14cc0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
14cd0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
14ce0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
14cf0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
14d00 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14d10 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
14d20 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
14d30 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
14d40 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
14d50 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
14d60 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
14d70 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
14d80 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
14d90 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
14da0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
14db0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
14dc0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
14dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
14e10 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
14e20 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
14e30 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
14e40 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
14e50 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
14e60 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
14e70 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
14e80 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
14e90 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
14ea0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14eb0 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
14ec0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
14ef0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
14f20 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
14f30 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
14f60 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
14f70 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
14f80 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
14f90 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
14fa0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
14fb0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
14fc0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
14ff0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
15000 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
15010 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
15020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15030 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
15040 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
15050 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
15060 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
15070 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
15080 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
15090 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
150a0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
150b0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
150c0 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
150d0 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
150e0 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
15110 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
15120 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
15130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15140 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
15150 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
15160 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
15170 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15180 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
15190 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
151a0 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
151b0 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
151c0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
151d0 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
151e0 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
151f0 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
15200 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15210 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
15220 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
15230 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
15240 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
15250 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
15260 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
15270 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
15280 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
15290 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
152a0 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
152b0 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
152c0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
152d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
152e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
152f0 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
15300 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
15310 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
15320 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
15330 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
15340 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
15350 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
15360 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
15370 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
15380 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
15390 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
153a0 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
153b0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
153c0 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
153d0 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
153e0 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
153f0 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
15400 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
15410 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
15420 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
15430 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
15440 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
15450 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
15460 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
15470 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
15480 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
15490 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
154a0 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
154b0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
154c0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
154d0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
154e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
154f0 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
15500 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
15510 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
15520 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
15530 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
15540 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
15550 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
15560 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
15570 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
15580 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
15590 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
155a0 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
155b0 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
155c0 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
155d0 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
155e0 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
155f0 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
15600 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
15610 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
15620 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
15630 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15640 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
15650 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
15660 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
15670 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
15680 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
15690 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
156a0 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
156b0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
156c0 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
156d0 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
156e0 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
156f0 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
15700 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
15710 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
15720 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
15730 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
15740 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
15750 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
15760 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
15770 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
15780 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
15790 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
157a0 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
157b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
157c0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
157d0 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
157e0 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45  Node is a SQLITE
157f0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
15800 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15810 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
15820 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
15830 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
15840 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
15850 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
15860 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
15870 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
15880 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
15890 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f  T operator */../
158a0 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
158b0 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
158c0 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
158d0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
158e0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
158f0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
15900 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
15910 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
15920 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15930 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15940 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15950 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15960 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15970 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15980 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
15990 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
159a0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
159b0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
159c0 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
159d0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
159e0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
159f0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15a00 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15a10 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15a20 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15a30 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15a40 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15a50 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15a60 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15a70 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15a80 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
15a90 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15aa0 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
15ab0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
15ac0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15ad0 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
15ae0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15af0 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15b00 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15b10 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15b20 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15b30 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15b40 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15b50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
15b60 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15b70 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
15b80 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
15b90 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
15ba0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
15bb0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
15bc0 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
15bd0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
15be0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15bf0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
15c00 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15c10 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15c20 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15c30 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15c40 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
15c50 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
15c60 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
15c70 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
15c80 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
15c90 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
15ca0 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
15cb0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
15cc0 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
15cd0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
15ce0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
15cf0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
15d00 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15d10 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15d20 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
15d30 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
15d40 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
15d50 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
15d60 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
15d70 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
15d80 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
15d90 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
15da0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
15db0 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
15dc0 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
15dd0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
15de0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
15df0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
15e00 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
15e10 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
15e20 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
15e30 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
15e40 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
15e50 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
15e60 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
15e70 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
15e80 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
15e90 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
15ea0 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
15eb0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
15ec0 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
15ed0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
15ee0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
15ef0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
15f00 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
15f10 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
15f20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
15f30 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
15f40 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
15f50 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
15f60 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
15f70 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
15f80 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
15f90 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
15fa0 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
15fb0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
15fc0 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
15fd0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
15fe0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
15ff0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
16000 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
16010 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
16020 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
16030 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
16040 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
16050 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
16060 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16070 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
16080 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
16090 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
160a0 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
160b0 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
160c0 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
160d0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
160e0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
160f0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
16100 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
16110 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
16120 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
16130 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
16140 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
16150 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
16160 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
16170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16180 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
16190 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
161a0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
161b0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
161c0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
161d0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
161e0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
161f0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
16200 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
16210 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
16220 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16230 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
16240 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
16250 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
16260 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
16270 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
16280 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
16290 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
162a0 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
162b0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
162c0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
162d0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
162e0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
162f0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
16300 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
16310 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
16320 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
16330 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
16340 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
16350 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
16360 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
16370 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
16380 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
16390 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
163a0 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
163b0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
163c0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
163d0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
163e0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
163f0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
16400 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
16410 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
16420 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
16430 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16440 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
16450 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
16460 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
16470 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
16480 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
16490 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
164a0 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
164b0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
164c0 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
164d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
164e0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
164f0 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
16500 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
16510 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
16520 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
16530 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
16540 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
16550 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
16560 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
16570 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
16580 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
16590 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
165a0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
165b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
165c0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
165d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
165e0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
165f0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
16600 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
16610 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
16620 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
16630 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
16640 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
16650 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
16660 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
16670 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16680 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16690 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
166a0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
166b0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
166c0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
166d0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
166e0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
166f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16700 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
16710 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
16720 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
16730 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
16740 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
16750 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
16760 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16770 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16780 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16790 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
167a0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
167b0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
167c0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
167d0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
167e0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
167f0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16800 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16810 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16820 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16830 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16840 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16850 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16860 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16870 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16880 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16890 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
168a0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
168b0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
168c0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
168d0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
168e0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
168f0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16900 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16910 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16920 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16930 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16940 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16950 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16960 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16970 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16980 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16990 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
169a0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
169b0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
169c0 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
169d0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
169e0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
169f0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16a00 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16a10 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16a20 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16a30 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16a40 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16a50 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16a60 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16a70 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16a80 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16a90 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16aa0 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16ab0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16ac0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16ad0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16ae0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16af0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16b00 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16b10 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16b20 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16b30 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16b40 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16b50 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16b60 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16b70 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16b80 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
16b90 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16ba0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16bb0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
16bc0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
16bd0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
16be0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16bf0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16c00 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16c10 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16c20 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16c30 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16c40 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16c50 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16c60 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16c70 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16c80 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
16c90 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16ca0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
16cb0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
16cc0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
16cd0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
16ce0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16cf0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16d00 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16d10 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16d20 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16d30 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
16d40 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
16d50 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
16d60 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
16d70 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
16d80 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
16d90 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
16da0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
16db0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
16dc0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
16dd0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
16de0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
16df0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
16e00 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
16e10 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
16e20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
16e30 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
16e40 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
16e50 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
16e60 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
16e70 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
16e80 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
16e90 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
16ea0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
16eb0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
16ec0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
16ed0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
16ee0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
16ef0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
16f00 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
16f10 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
16f20 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
16f30 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
16f40 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
16f50 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
16f60 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
16f70 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
16f80 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
16f90 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
16fa0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
16fb0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
16fc0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
16fd0 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
16fe0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
16ff0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
17000 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
17010 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
17020 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
17030 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
17040 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
17050 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
17060 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
17070 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
17080 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
17090 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
170a0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
170b0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
170c0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
170d0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
170e0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
170f0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
17100 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
17110 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
17120 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
17130 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17140 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
17150 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
17160 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
17170 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17180 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
17190 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
171a0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
171b0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
171c0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
171d0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
171e0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
171f0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
17200 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
17210 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
17220 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
17230 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
17240 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
17250 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
17260 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
17270 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
17280 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
17290 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
172a0 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
172b0 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
172c0 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
172d0 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
172e0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
172f0 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
17300 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
17310 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
17320 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75   clause */.    u
17330 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
17340 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
17350 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
17360 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
17370 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
17380 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
17390 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
173a0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
173b0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
173c0 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
173d0 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
173e0 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
173f0 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64  in WITH */.#ifnd
17400 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
17410 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
17420 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
17430 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
17440 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
17450 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
17460 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
17470 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
17480 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
17490 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
174a0 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
174b0 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
174c0 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
174d0 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
174e0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
174f0 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
17500 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
17510 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
17520 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
17530 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
17540 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
17550 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
17560 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
17570 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
17580 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
17590 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
175a0 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
175b0 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
175c0 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
175d0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
175e0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
175f0 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
17600 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
17610 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
17620 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
17630 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
17640 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
17650 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
17660 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
17670 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
17680 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
17690 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
176a0 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
176b0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
176c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
176d0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
176e0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
176f0 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
17700 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
17710 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
17720 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
17730 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
17740 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
17750 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
17760 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
17770 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
17780 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
17790 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
177a0 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
177b0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
177c0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
177d0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
177e0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
177f0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
17800 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
17810 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
17820 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
17830 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
17840 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
17850 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
17860 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
17870 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
17880 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
17890 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
178a0 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
178b0 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
178c0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
178d0 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
178e0 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
178f0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17900 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
17910 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
17920 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17930 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
17940 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
17950 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
17960 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
17970 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
17980 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
17990 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
179a0 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
179b0 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
179c0 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
179d0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
179e0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
179f0 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
17a00 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
17a10 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
17a20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
17a30 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
17a40 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
17a50 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
17a60 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
17a70 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17a80 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
17a90 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
17aa0 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
17ab0 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
17ac0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
17ad0 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
17ae0 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
17af0 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
17b00 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23  in pTabList */.#
17b10 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f  define WHERE_NO_
17b20 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78  AUTOINDEX     0x
17b30 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77  0080 /* Disallow
17b40 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
17b50 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
17b60 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
17b70 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
17b80 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
17b90 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
17ba0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17bb0 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
17bc0 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
17bd0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
17be0 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
17bf0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
17c00 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
17c10 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
17c20 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
17c30 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
17c40 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
17c50 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38  YGROUP      0x08
17c60 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
17c70 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
17c80 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
17c90 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58  WHERE_REOPEN_IDX
17ca0 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a         0x1000 /*
17cb0 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52   Try to use OP_R
17cc0 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20  eopenIdx */../* 
17cd0 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
17ce0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
17cf0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
17d00 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
17d10 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
17d20 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
17d30 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
17d40 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
17d50 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
17d60 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
17d70 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
17d80 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17d90 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
17da0 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
17db0 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
17dc0 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
17dd0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
17de0 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
17df0 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
17e00 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
17e10 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
17e20 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
17e30 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
17e40 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
17e50 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
17e60 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
17e70 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
17e80 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
17e90 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
17ea0 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
17eb0 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
17ec0 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
17ed0 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
17ee0 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
17ef0 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
17f00 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
17f10 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
17f20 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
17f30 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
17f40 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
17f50 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
17f60 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
17f70 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
17f80 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
17f90 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
17fa0 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
17fb0 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
17fc0 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
17fd0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
17fe0 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
17ff0 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
18000 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
18010 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
18020 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
18030 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
18040 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
18050 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
18060 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
18070 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
18080 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
18090 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
180a0 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
180b0 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
180c0 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
180d0 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
180e0 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
180f0 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
18100 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
18110 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
18120 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
18130 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
18140 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
18150 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
18160 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
18170 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
18180 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
18190 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
181a0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
181b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
181c0 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
181d0 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
181e0 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
181f0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
18200 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
18210 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
18220 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
18230 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
18240 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
18250 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
18260 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
18270 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
18280 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
18290 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
182a0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
182b0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
182c0 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
182d0 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
182e0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
182f0 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
18300 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
18310 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
18320 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
18330 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
18340 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
18350 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
18360 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
18370 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
18380 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
18390 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
183a0 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
183b0 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
183c0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
183d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
183e0 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
183f0 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
18400 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
18410 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18420 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
18430 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
18440 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
18450 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
18460 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
18470 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
18480 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
18490 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
184a0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
184b0 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
184c0 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
184d0 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69  .** Note:  NC_Mi
184e0 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76  nMaxAgg must hav
184f0 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
18500 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   as SF_MinMaxAgg
18510 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   and.** SQLITE_F
18520 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a  UNC_MINMAX..** .
18530 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
18540 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
18550 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
18560 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
18570 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
18580 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
18590 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f  0x0002  /* One o
185a0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
185b0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
185c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
185d0 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
185e0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
185f0 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
18600 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
18610 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
18620 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
18630 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
18640 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
18650 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
18660 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
18670 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f  tIdx   0x0010  /
18680 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
18690 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
186a0 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
186b0 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
186c0 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
186d0 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
186e0 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
186f0 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
18700 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
18710 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
18720 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
18730 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
18740 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
18750 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
18760 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
18770 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
18780 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
18790 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
187a0 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
187b0 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
187c0 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
187d0 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
187e0 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
187f0 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
18800 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
18810 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
18820 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
18830 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
18840 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
18850 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
18860 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
18870 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
18880 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
18890 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
188a0 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
188b0 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
188c0 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
188d0 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
188e0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
188f0 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
18900 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
18910 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
18920 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
18930 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
18940 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
18950 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
18960 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
18970 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
18980 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
18990 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
189a0 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
189b0 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
189c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
189d0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
189e0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
189f0 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
18a00 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
18a10 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
18a20 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
18a30 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
18a40 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
18a50 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
18a60 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
18a70 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
18a80 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
18a90 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
18aa0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
18ab0 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
18ac0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
18ad0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
18ae0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
18af0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18b00 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
18b10 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
18b20 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
18b30 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
18b40 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
18b50 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
18b60 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
18b70 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18b90 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
18ba0 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
18bb0 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
18bc0 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
18bd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
18be0 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
18bf0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
18c00 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
18c10 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
18c20 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
18c30 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
18c40 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  s */.#if SELECTT
18c50 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63  RACE_ENABLED.  c
18c60 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d  har zSelName[12]
18c70 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69  ;     /* Symboli
18c80 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53  c name of this S
18c90 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65  ELECT use for de
18ca0 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  bugging */.#endi
18cb0 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  f.  int addrOpen
18cc0 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
18cd0 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
18ce0 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
18cf0 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75  is select */.  u
18d00 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  64 nSelectRow;  
18d10 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
18d20 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
18d30 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72  ult rows */.  Sr
18d40 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
18d50 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
18d60 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18d70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
18d80 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
18d90 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18da0 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
18db0 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
18dc0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
18dd0 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
18de0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
18df0 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
18e00 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
18e10 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
18e20 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
18e30 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
18e40 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
18e50 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
18e60 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
18e70 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
18e80 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
18e90 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
18ea0 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
18eb0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
18ec0 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
18ed0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
18ee0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
18ef0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
18f00 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
18f10 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
18f20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
18f30 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
18f40 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
18f50 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
18f60 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
18f70 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
18f80 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
18f90 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
18fa0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
18fb0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
18fc0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
18fd0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
18fe0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
18ff0 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
19000 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
19010 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
19020 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
19030 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
19040 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
19050 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20           0x0002 
19060 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
19070 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
19080 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
19090 76 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30  ved        0x000
190a0 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
190b0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
190c0 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
190d0 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
190e0 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 43 6f     0x0008  /* Co
190f0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
19100 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
19110 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
19120 65 6d 65 72 61 6c 20 20 20 30 78 30 30 31 30 20  emeral   0x0010 
19130 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
19140 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
19150 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
19160 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20  Expanded        
19170 30 78 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74  0x0020  /* sqlit
19180 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
19190 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
191a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
191b0 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78  sTypeInfo     0x
191c0 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0040  /* FROM su
191d0 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
191e0 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
191f0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
19200 75 6e 64 20 20 20 20 20 20 20 20 30 78 30 30 38  und        0x008
19210 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
19220 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
19230 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
19240 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30  ues          0x0
19250 31 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  100  /* Synthesi
19260 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
19270 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
19280 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
19290 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
192a0 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
192b0 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
192c0 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
192d0 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
192e0 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 50      0x0400  /* P
192f0 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
19300 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
19310 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
19320 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
19330 20 30 78 30 38 30 30 20 20 2f 2a 20 4e 65 65 64   0x0800  /* Need
19340 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
19350 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
19360 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
19370 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
19380 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72   0x1000  /* Aggr
19390 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
193a0 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
193b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
193c0 63 75 72 73 69 76 65 20 20 20 20 20 20 20 30 78  cursive       0x
193d0 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
193e0 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
193f0 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
19400 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
19410 76 65 72 74 65 64 20 20 20 20 20 20 20 30 78 34  verted       0x4
19420 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
19430 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
19440 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
19450 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
19460 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
19470 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
19480 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
19490 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
194a0 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
194b0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
194c0 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
194d0 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
194e0 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
194f0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19500 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
19510 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
19520 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
19530 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20  ry index .**    
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
19560 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19570 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
19580 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
19590 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
195a0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
195b0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
195c0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
195d0 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
195e0 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
195f0 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
19600 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
19610 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19620 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
19630 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
19640 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
19650 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
19660 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
19670 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
19680 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
19690 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
196a0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
196b0 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
196c0 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
196f0 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
19700 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
19710 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
19720 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
19730 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
19740 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
19750 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
19760 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
19770 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
19780 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
19790 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
197a0 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
197b0 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
197c0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
197d0 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
197e0 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
197f0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
19800 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19810 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
19820 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
19830 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
19840 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
19870 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
19880 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
19890 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
198a0 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
198b0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
198c0 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
198d0 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
198f0 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
19900 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
19910 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
19920 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
19930 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
19940 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
19950 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
19960 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
19990 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
199a0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
199b0 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  rm. .**         
199c0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
199d0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
199e0 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
199f0 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
19a20 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
19a30 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
19a40 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19a50 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
19a60 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
19a70 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
19a80 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
19a90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19aa0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
19ab0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
19ac0 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
19ad0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19af0 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
19b00 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
19b10 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
19b40 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
19b50 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
19b60 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
19b70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19b80 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
19b90 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
19ba0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
19bb0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
19bc0 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
19bd0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19bf0 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
19c00 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
19c10 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
19c20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19c30 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
19c40 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
19c50 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
19c60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
19c90 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
19ca0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
19cb0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
19ce0 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
19cf0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
19d00 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
19d10 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
19d20 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19d30 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
19d40 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
19d50 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
19d60 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
19d70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
19d80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19d90 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
19da0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
19db0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
19dc0 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19de0 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
19df0 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
19e00 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
19e30 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
19e40 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
19e50 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19e60 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
19e70 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19e80 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
19e90 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
19ea0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
19eb0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
19ec0 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
19ef0 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
19f00 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
19f10 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
19f40 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
19f50 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
19f60 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
19f70 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
19f80 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
19f90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
19fa0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
19fc0 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
19fd0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
19fe0 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
19ff0 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1a010 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1a020 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1a030 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1a040 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1a050 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1a060 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1a090 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1a0a0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1a0b0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a0d0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1a0e0 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1a0f0 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1a100 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1a110 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1a120 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1a130 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1a140 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1a150 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1a160 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1a170 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1a180 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1a190 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1a1a0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1a1b0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1a1c0 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1a1d0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1a1e0 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1a1f0 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1a200 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1a210 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1a220 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1a230 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1a240 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1a250 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1a260 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1a270 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1a280 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1a290 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1a2a0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1a2b0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1a2c0 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1a2d0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1a2e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a2f0 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1a300 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1a310 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1a320 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1a330 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1a340 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1a350 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1a360 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1a370 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1a380 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1a390 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1a3a0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1a3b0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1a3c0 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1a3d0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1a3e0 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1a3f0 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1a400 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1a410 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1a420 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1a430 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1a440 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1a450 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1a460 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1a470 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1a480 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1a490 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1a4a0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1a4b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1a4c0 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1a4d0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1a4e0 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1a4f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a500 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1a510 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1a520 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1a530 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1a540 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1a550 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1a560 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1a570 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1a580 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1a590 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1a5a0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1a5b0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1a5c0 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1a5d0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1a5e0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1a5f0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1a600 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
1a610 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
1a620 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1a630 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1a640 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
1a650 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1a660 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1a670 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1a680 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1a690 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1a6a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1a6b0 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1a6c0 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1a6d0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1a6e0 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1a6f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1a700 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1a710 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
1a720 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1a730 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1a740 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1a750 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1a760 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1a770 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1a780 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1a790 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1a7a0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1a7b0 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
1a7c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1a7d0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1a7e0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1a7f0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1a800 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1a810 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1a820 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1a830 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1a840 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1a850 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1a860 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1a870 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1a880 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1a890 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1a8a0 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1a8b0 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
1a8c0 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1a8d0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1a8e0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1a8f0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1a900 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1a910 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1a920 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1a930 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1a940 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1a950 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1a960 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1a970 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1a980 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1a990 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1a9a0 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1a9b0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1a9c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1a9d0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1a9e0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1a9f0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1aa00 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1aa10 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1aa20 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1aa30 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1aa40 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1aa50 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1aa60 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1aa70 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1aa80 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1aa90 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1aaa0 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1aab0 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1aac0 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1aad0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1aae0 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1aaf0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1ab00 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1ab10 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ab20 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1ab30 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
1ab40 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1ab50 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1ab60 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1ab70 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1ab80 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1ab90 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1aba0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1abb0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1abc0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1abd0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1abe0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1abf0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1ac00 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1ac10 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1ac20 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1ac30 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1ac40 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1ac50 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1ac60 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1ac70 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1ac80 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1ac90 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1aca0 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1acb0 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1acc0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1acd0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1ace0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1acf0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1ad00 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1ad10 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1ad20 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1ad30 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1ad40 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1ad50 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1ad60 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1ad70 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1ad80 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1ad90 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1ada0 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1adb0 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1adc0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1add0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1ade0 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
1adf0 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1ae00 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1ae10 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1ae20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1ae30 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1ae40 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1ae50 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1ae60 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1ae70 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1ae80 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1ae90 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1aea0 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1aeb0 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1aec0 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1aed0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1aee0 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1aef0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1af00 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1af10 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1af20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1af30 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1af40 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1af50 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1af60 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1af70 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1af80 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1af90 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1afa0 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1afb0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1afc0 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1afd0 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1afe0 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1aff0 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1b000 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1b010 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1b020 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1b030 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1b040 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1b050 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1b060 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1b070 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1b080 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1b090 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1b0a0 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1b0b0 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1b0c0 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1b0d0 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1b0e0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1b0f0 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1b100 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1b110 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b120 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1b130 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1b140 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1b150 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1b160 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1b170 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1b180 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1b190 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1b1a0 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1b1b0 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1b1c0 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1b1d0 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1b1e0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1b1f0 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1b200 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1b210 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1b220 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1b230 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1b240 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b250 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1b260 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1b270 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1b280 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1b290 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1b2a0 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1b2b0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1b2c0 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1b2d0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1b2e0 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1b2f0 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1b300 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1b310 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1b320 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1b330 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1b340 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1b350 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1b360 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1b370 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1b380 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1b390 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1b3a0 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1b3b0 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1b3c0 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1b3d0 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1b3e0 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1b3f0 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1b400 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1b410 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1b420 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1b430 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1b440 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1b450 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1b460 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1b470 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1b480 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1b490 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
1b4a0 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1b4b0 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1b4c0 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1b4d0 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1b4e0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1b4f0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1b500 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1b510 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1b520 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1b530 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1b540 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1b550 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1b560 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1b570 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1b580 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1b590 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1b5a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1b5b0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1b5c0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1b5d0 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1b5e0 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1b5f0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1b600 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1b610 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1b620 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1b630 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1b640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1b650 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1b660 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1b670 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1b680 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1b690 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1b6a0 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1b6b0 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1b6c0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1b6d0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1b6e0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1b6f0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1b700 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1b710 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b720 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1b730 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1b740 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1b750 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1b760 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b770 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1b780 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1b790 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1b7a0 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1b7b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1b7c0 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1b7d0 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1b7e0 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1b7f0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1b800 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1b810 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1b820 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1b830 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1b840 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1b850 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1b860 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1b870 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1b880 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1b890 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1b8a0 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1b8b0 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e  onstants */.  in
1b8c0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1b8d0 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1b8e0 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1b8f0 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1b900 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1b910 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1b920 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1b930 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1b940 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1b950 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1b960 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1b970 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1b980 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1b990 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1b9a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1b9b0 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1b9c0 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1b9d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1b9e0 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1b9f0 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1ba00 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1ba10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ba20 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1ba30 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1ba40 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1ba50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ba60 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1ba70 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1ba80 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
1ba90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1baa0 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
1bab0 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
1bac0 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1bad0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bae0 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1baf0 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1bb00 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65  ] */.  int iFixe
1bb10 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dOp;        /* N
1bb20 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70  ever back out op
1bb30 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31  codes iFixedOp-1
1bb40 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20   or earlier */. 
1bb50 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1bb60 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1bb70 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1bb80 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1bb90 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1bba0 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20   iPartIdxTab;   
1bbb0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65    /* Table corre
1bbc0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61  sponding to a pa
1bbd0 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20  rtial index */. 
1bbe0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
1bbf0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
1bc00 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
1bc10 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
1bc20 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
1bc30 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
1bc40 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1bc50 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
1bc60 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
1bc70 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  ru values */.  i
1bc80 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
1bc90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bca0 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
1bcb0 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
1bcc0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
1bcd0 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
1bce0 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  ls */.  struct y
1bcf0 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
1bd00 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
1bd10 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
1bd20 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1bd30 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20     i16 iColumn; 
1bd40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1bd50 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
1bd60 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
1bd70 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
1bd80 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
1bd90 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
1bda0 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
1bdb0 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
1bdc0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1bdd0 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
1bde0 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
1bdf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1be00 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
1be10 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
1be20 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
1be30 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
1be40 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
1be50 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
1be60 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
1be70 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
1be80 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
1be90 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
1bea0 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
1beb0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
1bec0 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  try */.  ExprLis
1bed0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1bee0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1bef0 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1bf00 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1bf10 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1bf20 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1bf30 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1bf40 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1bf50 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1bf60 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1bf70 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1bf80 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1bf90 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1bfa0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1bfb0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1bfc0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1bfd0 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75    int cookieValu
1bfe0 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  e[SQLITE_MAX_ATT
1bff0 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61  ACHED+2];  /* Va
1c000 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20  lues of cookies 
1c010 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69  to verify */.  i
1c020 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
1c030 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1c040 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
1c050 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
1c060 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
1c070 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
1c080 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1c090 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
1c0a0 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
1c0b0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
1c0c0 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
1c0d0 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
1c0e0 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
1c0f0 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
1c100 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1c110 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74  CE_ENABLED.  int
1c120 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
1c130 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
1c140 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1c150 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1c160 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20  SelectIndent;   
1c170 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e  /* How far to in
1c180 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45  dent SELECTTRACE
1c190 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  () output */.#en
1c1a0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1c1b0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
1c1c0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
1c1d0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
1c1e0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
1c1f0 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
1c200 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
1c210 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
1c220 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
1c230 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
1c240 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
1c250 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
1c260 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
1c270 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
1c280 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
1c290 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  nters */..  /* I
1c2a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1c2b0 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
1c2c0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
1c2d0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1c2e0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1c2f0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1c300 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1c310 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1c320 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1c330 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1c340 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1c350 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1c360 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1c370 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1c380 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1c390 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1c3a0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1c3b0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1c3c0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1c3d0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1c3e0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1c3f0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1c400 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1c410 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1c420 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1c430 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1c440 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1c450 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1c460 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1c470 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1c480 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1c490 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1c4a0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1c4b0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1c4c0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1c4d0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1c4e0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1c4f0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1c500 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1c510 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1c520 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1c530 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1c540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
1c580 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
1c590 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
1c5a0 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
1c5b0 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
1c5c0 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
1c5d0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
1c5e0 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
1c5f0 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
1c600 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
1c610 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
1c620 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e  offsetof(Parse,n
1c630 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72  Var) so the nVar
1c640 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1c650 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20  he first field. 
1c660 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72   ** in the recur
1c670 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1c680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c6a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c6b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c6c0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20  *******/..  int 
1c6d0 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
1c6e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c6f0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1c700 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1c710 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1c720 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
1c730 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c740 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
1c750 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
1c760 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
1c770 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
1c780 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
1c790 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1c7a0 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72   KEY */.  u8 bFr
1c7b0 65 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  eeWith;         
1c7c0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
1c7d0 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66  With should be f
1c7e0 72 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72  reed with parser
1c7f0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
1c800 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c810 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
1c820 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
1c830 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
1c840 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
1c850 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1c860 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
1c870 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
1c880 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
1c890 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
1c8a0 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
1c8b0 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
1c8c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c8d0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
1c8e0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
1c8f0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
1c900 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1c910 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c920 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
1c930 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1c940 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
1c950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1c960 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
1c970 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
1c980 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
1c990 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c9a0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
1c9b0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
1c9c0 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
1c9d0 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
1c9e0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1c9f0 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
1ca00 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1ca10 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
1ca20 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
1ca30 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1ca40 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
1ca50 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
1ca60 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
1ca70 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
1ca80 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
1ca90 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
1caa0 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
1cab0 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
1cac0 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
1cad0 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  )) */.  const ch
1cae0 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
1caf0 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
1cb00 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
1cb10 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
1cb20 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
1cb30 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
1cb40 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
1cb50 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1cb60 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1cb70 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
1cb80 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
1cb90 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
1cba0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
1cbb0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
1cbc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
1cbd0 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
1cbe0 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
1cbf0 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
1cc00 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  backs */.  Token
1cc10 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
1cc20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
1cc30 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
1cc40 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
1cc50 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
1cc60 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  stToken;        
1cc70 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
1cc80 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  en parsed */.#if
1cc90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cca0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1ccb0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
1ccc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
1ccd0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
1cce0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
1ccf0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
1cd00 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
1cd10 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
1cd20 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
1cd30 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
1cd40 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
1cd50 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
1cd60 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
1cd70 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
1cd80 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
1cd90 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
1cda0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
1cdb0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
1cdc0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
1cdd0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
1cde0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1cdf0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
1ce00 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1ce10 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  LL */.};../*.** 
1ce20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
1ce30 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
1ce40 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
1ce50 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
1ce60 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1ce70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1ce80 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
1ce90 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
1cea0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
1ceb0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
1cec0 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
1ced0 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
1cee0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1cef0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1cf00 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
1cf10 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
1cf20 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
1cf30 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
1cf40 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1cf50 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
1cf60 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
1cf70 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
1cf80 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
1cf90 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1cfa0 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
1cfb0 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
1cfc0 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
1cfd0 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
1cfe0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1cff0 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
1d000 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
1d010 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
1d020 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
1d030 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
1d040 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  pcodes..**.** No
1d050 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  te that the valu
1d060 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50 20 61 6e  es for ISNOOP an
1d070 64 20 4c 45 4e 47 54 48 41 52 47 20 61 72 65 20  d LENGTHARG are 
1d080 74 68 65 20 73 61 6d 65 2e 20 20 42 75 74 20 61  the same.  But a
1d090 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62 69 74 73  s .** those bits
1d0a0 20 61 72 65 20 6e 65 76 65 72 20 75 73 65 64 20   are never used 
1d0b0 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f 70 63 6f  on the same opco
1d0c0 64 65 2c 20 74 68 65 20 6f 76 65 72 6c 61 70 20  de, the overlap 
1d0d0 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a 2a 2f 0a  is harmless..*/.
1d0e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
1d0f0 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
1d100 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
1d110 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1d120 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1d130 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1d140 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d150 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1d160 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1d170 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d180 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1d190 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1d1a0 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1d1b0 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1d1c0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1d1d0 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1d1e0 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1d1f0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1d200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d210 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1d220 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1d230 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1d240 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1d250 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1d260 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1d270 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1d280 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1d290 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1d2a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e  efine OPFLAG_ISN
1d2b0 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20  OOP        0x40 
1d2c0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20     /* OP_Delete 
1d2d0 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d  does pre-update-
1d2e0 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  hook only */.#de
1d2f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1d300 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1d310 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1d320 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1d330 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1d340 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1d350 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1d360 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1d370 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1d380 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1d390 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1d3a0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d3b0 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1d3c0 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1d3d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d3e0 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
1d3f0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
1d400 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
1d410 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
1d420 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d430 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1d440 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  04    /* P2 to O
1d450 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1d460 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1d470 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d480 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1d490 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1d4a0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1d4b0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1d4c0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1d4d0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1d4e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1d4f0 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1d500 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1d510 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1d520 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1d530 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1d540 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1d550 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1d560 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1d570 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1d580 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1d590 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1d5a0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1d5b0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1d5c0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1d5d0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1d5e0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1d5f0 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1d600 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1d610 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1d620 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1d630 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1d640 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1d650 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1d660 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d670 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1d680 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d690 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1d6a0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1d6b0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1d6c0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1d6d0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1d6e0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1d6f0 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1d700 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1d710 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1d720 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1d730 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1d740 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1d750 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1d760 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1d770 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1d780 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1d790 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1d7a0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1d7b0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1d7c0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1d7f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1d800 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1d810 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1d820 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1d830 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d850 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1d860 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1d870 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1d880 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1d890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d8a0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1d8b0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1d8c0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1d8d0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1d8e0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1d8f0 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1d900 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1d910 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1d920 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1d930 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1d940 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1d950 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1d960 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1d990 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1d9a0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1d9b0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1d9c0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1d9d0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1d9e0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1d9f0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1da00 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1da10 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1da20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1da30 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1da40 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1da50 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1da60 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1da70 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1da80 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1da90 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1daa0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1dab0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1dac0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1dad0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1dae0 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1daf0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1db00 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1db10 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1db20 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1db30 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1db40 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1db50 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1db60 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1db70 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1db80 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1db90 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1dba0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1dbb0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1dbc0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1dbd0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1dbe0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1dbf0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1dc00 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1dc10 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1dc20 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1dc30 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1dc40 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1dc50 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1dc60 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1dc70 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1dc80 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1dc90 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1dca0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1dcb0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1dcc0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1dcd0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1dce0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1dcf0 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1dd00 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1dd10 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1dd20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1dd30 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1dd40 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1dd50 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1dd60 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1dd70 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1dd80 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1dd90 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1dda0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1ddb0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1ddc0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1ddd0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1dde0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1ddf0 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1de00 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1de10 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1de20 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1de30 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1de40 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1de50 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1de60 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1de70 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1de80 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1de90 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1dea0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1deb0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1dec0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1ded0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1dee0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1def0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1df00 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1df10 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1df20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1df30 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
1df40 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
1df50 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
1df60 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1df70 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
1df80 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1df90 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1dfa0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
1dfb0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
1dfc0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
1dfd0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
1dfe0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1dff0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1e000 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
1e010 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
1e020 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e030 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
1e040 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
1e050 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
1e060 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
1e070 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
1e080 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
1e090 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61  K_DELETE). * zTa
1e0a0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
1e0b0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1e0c0 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1e0d0 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1e0e0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1e0f0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1e100 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1e110 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1e120 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1e130 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1e140 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1e150 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
1e160 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1e170 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1e180 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1e190 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1e1a0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1e1b0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
1e1c0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1e1d0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1e1e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e1f0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1e200 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1e210 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
1e220 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
1e230 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
1e240 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e260 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
1e270 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
1e280 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
1e290 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
1e2a0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
1e2b0 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
1e2c0 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1e2d0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1e2e0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1e2f0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1e300 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1e310 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1e320 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1e330 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1e340 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
1e350 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
1e360 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
1e370 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
1e380 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
1e390 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1e3a0 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
1e3b0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
1e3c0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
1e3d0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1e3e0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
1e3f0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1e400 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1e410 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1e420 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1e430 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1e440 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1e450 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1e460 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1e470 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1e480 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1e490 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1e4a0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1e4b0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1e4c0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1e4d0 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1e4e0 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1e4f0 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1e500 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1e510 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1e520 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1e530 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1e540 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1e550 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1e560 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1e570 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1e580 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1e590 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1e5a0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1e5b0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1e5c0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1e5d0 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1e5e0 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1e5f0 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1e600 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1e610 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1e620 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1e630 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e640 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1e650 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1e660 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1e670 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1e680 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1e690 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1e6a0 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1e6b0 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1e6c0 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1e6d0 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1e6e0 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1e6f0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1e700 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1e710 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1e720 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1e730 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1e740 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e750 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1e760 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1e770 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1e780 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1e790 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1e7a0 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1e7b0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1e7c0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1e7d0 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1e7e0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1e7f0 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1e800 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1e810 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1e820 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1e830 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1e840 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1e850 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1e860 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1e870 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1e880 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1e890 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1e8a0 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1e8b0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1e8c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1e8d0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1e8e0 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1e8f0 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1e900 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1e910 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1e920 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1e930 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1e940 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1e950 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1e960 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1e970 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1e980 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1e990 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1e9a0 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1e9b0 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1e9c0 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1e9d0 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1e9e0 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
1e9f0 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
1ea00 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61  sage */.  u8   a
1ea10 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1ea20 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1ea30 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1ea40 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1ea50 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1ea60 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1ea70 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1ea80 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1ea90 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1eaa0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1eab0 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1eac0 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1ead0 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1eae0 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1eaf0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1eb00 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1eb10 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1eb20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1eb30 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1eb40 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1eb50 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1eb60 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1eb70 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1eb80 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1eb90 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1eba0 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1ebb0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1ebc0 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1ebd0 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1ebe0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1ebf0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1ec00 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1ec10 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1ec20 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1ec30 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1ec40 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1ec50 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1ec60 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1ec70 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1ec80 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1ec90 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1eca0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1ecb0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1ecc0 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1ecd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ece0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1ecf0 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1ed00 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1ed10 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ed30 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1ed40 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1ed50 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1ed60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ed70 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1ed80 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1ed90 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1eda0 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1edb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1edc0 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1edd0 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1ede0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1edf0 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1ee00 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1ee10 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1ee20 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1ee30 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1ee40 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1ee50 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1ee60 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1ee70 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
1ee80 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
1ee90 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1eea0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
1eeb0 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
1eec0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1eef0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1ef00 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1ef10 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1ef20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ef30 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1ef40 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1ef50 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1ef60 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1ef70 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1ef80 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1ef90 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1efa0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1efb0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1efc0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1efd0 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1efe0 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1eff0 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1f000 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1f010 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1f020 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1f030 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f050 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1f060 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1f070 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1f080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1f090 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1f0a0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1f0b0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1f0c0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1f0d0 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1f0e0 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1f0f0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1f100 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1f110 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1f120 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1f130 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1f140 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1f150 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1f160 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1f170 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1f180 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1f190 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1f1a0 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1f1b0 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1f1e0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1f1f0 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1f200 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f210 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f220 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1f230 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1f240 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1f250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1f260 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1f270 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1f2a0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1f2b0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1f2c0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f2e0 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1f2f0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1f300 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1f310 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1f320 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1f330 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1f340 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1f350 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1f360 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1f370 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1f380 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1f390 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
1f3a0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
1f3b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1f3c0 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
1f3d0 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
1f3e0 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1f3f0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1f400 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1f410 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1f420 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1f430 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1f440 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1f450 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f470 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1f480 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1f490 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1f4a0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1f4d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1f4e0 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1f4f0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1f520 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1f530 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1f540 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f560 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1f570 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1f580 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1f590 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1f5a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f5b0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1f5c0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1f5d0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1f5e0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1f5f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f600 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1f610 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
1f620 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1f630 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1f640 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1f650 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1f660 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1f670 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1f680 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1f690 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1f6a0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1f6b0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f6d0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1f6e0 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
1f6f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1f700 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1f710 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1f720 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1f730 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1f740 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1f750 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1f760 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1f770 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
1f780 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
1f790 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
1f7a0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
1f7b0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
1f7c0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
1f7d0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
1f7e0 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
1f7f0 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
1f800 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
1f810 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
1f820 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
1f830 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
1f840 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1f850 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
1f860 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f890 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
1f8a0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1f8b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
1f8c0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
1f8d0 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
1f8e0 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
1f8f0 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
1f900 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
1f910 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
1f920 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1f930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f940 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1f950 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1f960 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
1f970 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
1f980 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
1f990 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
1f9a0 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
1f9b0 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
1f9c0 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
1f9d0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1f9e0 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
1f9f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1fa00 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
1fa10 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
1fa20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
1fa30 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
1fa40 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
1fa50 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
1fa60 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
1fa70 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
1fa80 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
1fa90 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
1faa0 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
1fab0 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
1fac0 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
1fad0 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
1fae0 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
1faf0 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
1fb00 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
1fb10 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
1fb20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1fb30 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
1fb40 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
1fb50 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
1fb60 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
1fb70 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
1fb80 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
1fb90 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1fba0 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
1fbb0 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
1fbc0 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
1fbd0 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
1fbe0 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1fbf0 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1fc00 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1fc10 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1fc20 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1fc30 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1fc40 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1fc50 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1fc60 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1fc70 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1fc80 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1fc90 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1fca0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1fcb0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
1fcc0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
1fcd0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
1fce0 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
1fcf0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1fd00 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1fd10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fd30 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1fd40 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1fd50 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1fd80 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
1fd90 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
1fdc0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
1fdd0 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
1fe10 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
1fe20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
1fe30 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fe50 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
1fe60 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe90 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
1fea0 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
1fee0 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
1fef0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
1ff20 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
1ff30 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
1ff40 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
1ff50 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
1ff60 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
1ff70 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  nces */.  } u;.}
1ff80 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
1ff90 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
1ffa0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1ffb0 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
1ffc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1ffd0 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
1ffe0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
1fff0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20000 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
20010 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
20020 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
20030 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
20040 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20050 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
20060 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20070 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  );../*.** Return
20080 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
20090 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
200a0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
200b0 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
200c0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
200d0 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
200e0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
200f0 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
20100 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
20110 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
20120 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
20130 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
20140 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
20150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
20160 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
20170 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
20180 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
20190 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
201a0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
201b0 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
201c0 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
201d0 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
201e0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
201f0 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
20200 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
20210 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
20220 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
20230 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20240 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20250 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
20260 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
20270 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
202a0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
202b0 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
202c0 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
202d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
202e0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
202f0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
20300 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
20310 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
20320 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
20330 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
20340 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
20350 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
20360 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
20370 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
20380 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
20390 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
203a0 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
203b0 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
203c0 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
203d0 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
203e0 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20 20  har *zErr;      
203f0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
20400 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
20410 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
20420 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
20430 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
20440 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
20450 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20460 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
20470 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
20480 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
20490 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
204a0 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
204b0 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
204c0 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
204d0 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
204e0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
204f0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
20500 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
20510 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
20520 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
20530 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
20540 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
20550 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
20560 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
20570 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
20580 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
20590 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
205a0 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
205b0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
205c0 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
205d0 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
205e0 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
205f0 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
20600 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
20610 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
20620 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
20630 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
20640 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
20660 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
20670 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
206a0 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
206b0 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
206c0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
206d0 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20700 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
20710 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
20720 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
20730 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
20740 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
20750 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
20760 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
20770 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
20780 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
20790 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
207a0 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
207b0 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
207c0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
207d0 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
207e0 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
207f0 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
20800 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
20810 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
20820 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
20830 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
20840 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
20850 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
20860 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
20870 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
20880 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
20890 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
208a0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
208b0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
208c0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
208d0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
208e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
208f0 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
20900 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
20910 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
20920 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
20930 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
20940 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
20950 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
20960 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
20970 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
20980 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
20990 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
209a0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
209b0 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
209c0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
209d0 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
209e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
209f0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
20a00 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
20a10 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
20a20 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
20a30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20a40 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
20a50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20a60 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
20a70 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
20a80 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
20a90 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
20aa0 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
20ab0 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
20ac0 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
20ad0 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
20ae0 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
20af0 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
20b00 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
20b10 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
20b20 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
20b30 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
20b40 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
20b50 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
20b60 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
20b70 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
20b80 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
20b90 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
20ba0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
20bb0 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
20bc0 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
20bd0 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
20be0 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
20bf0 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
20c00 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
20c10 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
20c20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
20c30 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
20c40 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
20c50 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
20c60 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
20c70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
20c80 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
20c90 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
20ca0 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
20cb0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20cc0 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
20cd0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20ce0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
20cf0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20d00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20d10 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
20d20 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
20d30 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
20d40 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20d50 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
20d60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20d70 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
20d80 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20d90 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20da0 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
20db0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
20dc0 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
20dd0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20de0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
20df0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20e00 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
20e10 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20e20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20e30 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
20e40 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
20e50 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
20e60 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
20e70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
20e80 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20e90 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
20ea0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
20eb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20ec0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20ed0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
20ee0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
20ef0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20f00 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
20f10 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
20f20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20f30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20f40 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
20f50 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
20f60 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
20f70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
20f80 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
20f90 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20fa0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20fb0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
20fc0 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
20fd0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20fe0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
20ff0 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
21000 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
21010 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23 69  r)(x)).#endif.#i
21020 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21030 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
21040 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65  DIAGS.int sqlite
21050 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23  3IsIdChar(u8);.#
21060 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
21070 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
21080 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
21090 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
210a0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
210b0 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
210c0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
210d0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
210e0 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
210f0 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
21100 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
21110 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
21120 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
21130 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
21140 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
21150 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
21160 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
21170 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
21180 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
21190 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
211a0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
211b0 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
211c0 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
211d0 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
211e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
211f0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
21200 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
21210 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
21220 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
21230 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
21240 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
21250 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
21260 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
21270 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
21280 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
21290 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
212a0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
212b0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
212c0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
212d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
212e0 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
212f0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
21300 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
21310 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
21320 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
21330 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
21340 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
21350 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
21360 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
21370 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
21380 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
21390 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
213a0 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
213b0 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
213c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
213d0 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c  IN_TEST.void sql
213e0 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
213f0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
21400 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
21410 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
21420 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
21430 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
21440 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
21450 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
21460 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
21470 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
21480 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
21490 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
214a0 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
214b0 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
214c0 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
214d0 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
214e0 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
214f0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
21500 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
21510 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
21520 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
21530 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
21540 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
21550 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
21560 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
21570 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
21580 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21590 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
215a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
215b0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
215c0 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
215d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
215e0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
215f0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
21600 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
21610 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
21620 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
21630 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21640 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
21650 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
21660 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
21670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21680 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
21690 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
216a0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
216b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
216c0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
216d0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
216e0 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
216f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21700 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
21710 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
21720 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
21730 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
21740 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
21750 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
21760 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
21770 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
21780 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
21790 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
217a0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
217b0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
217c0 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
217d0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
217e0 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
217f0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
21800 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
21810 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
21820 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
21830 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
21840 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
21850 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
21860 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
21870 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
21880 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
21890 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 73  void);.#endif..s
218a0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
218b0 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
218c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
218d0 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
218e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
218f0 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
21900 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21910 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
21920 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
21930 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
21940 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
21950 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
21960 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
21970 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
21980 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
21990 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
219a0 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
219b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
219c0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
219d0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
219e0 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
219f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
21a00 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
21a10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
21a20 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
21a30 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
21a40 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
21a50 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
21a60 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
21a70 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
21a80 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
21a90 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
21aa0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
21ab0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
21ac0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
21ad0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21ae0 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
21af0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
21b00 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
21b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21b20 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
21b30 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
21b40 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
21b50 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
21b60 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
21b70 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
21b80 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21b90 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
21ba0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21bb0 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
21bc0 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
21bd0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
21be0 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
21bf0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
21c00 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
21c10 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
21c20 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
21c30 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21c40 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
21c50 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21c60 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
21c70 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
21c80 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21c90 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
21ca0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21cb0 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21cc0 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
21cd0 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
21ce0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
21cf0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
21d00 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
21d10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
21d20 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
21d30 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
21d40 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
21d50 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21d60 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
21d70 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
21d80 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
21d90 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
21da0 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
21db0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
21dc0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
21dd0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
21de0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
21df0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
21e00 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
21e10 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
21e20 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
21e30 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
21e40 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
21e50 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
21e60 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
21e70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21e80 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
21e90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21ea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
21eb0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e  quote(char*);.in
21ec0 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
21ed0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
21ee0 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
21ef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
21f00 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
21f10 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
21f20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
21f30 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
21f40 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
21f50 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
21f60 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21f70 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
21f80 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
21f90 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
21fa0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
21fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21fc0 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
21fd0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
21fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
21ff0 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
22000 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
22010 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
22020 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
22030 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
22040 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
22050 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
22060 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22070 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
22080 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
22090 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
220a0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
220b0 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
220c0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
220d0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
220e0 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
220f0 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
22100 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
22110 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
22120 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
22130 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
22140 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
22150 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
22160 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
22170 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22180 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
22190 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
221a0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
221b0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
221c0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
221d0 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
221e0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
221f0 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
22200 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
22210 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22220 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
22230 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
22240 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
22250 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22260 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
22270 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
22280 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22290 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
222a0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
222b0 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
222c0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
222d0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
222e0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
222f0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
22300 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
22310 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
22320 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
22330 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22340 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
22350 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
22360 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22370 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
22380 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
22390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
223a0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
223b0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
223c0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
223d0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
223e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
223f0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
22400 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
22410 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
22420 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
22430 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
22440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
22450 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
22460 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
22470 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
22480 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
22490 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
224a0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
224b0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
224c0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
224d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
224e0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
224f0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
22500 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
22510 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
22520 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
22530 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
22540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22550 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
22560 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
22570 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22580 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
22590 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
225a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
225b0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
225c0 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
225d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
225e0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
225f0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
22600 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
22610 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
22620 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
22630 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22640 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
22650 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
22660 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
22670 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
22680 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
22690 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
226a0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
226b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
226c0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
226d0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
226e0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
226f0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
22700 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
22710 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
22720 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
22730 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
22740 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
22750 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
22760 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
22770 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
22780 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
22790 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
227a0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
227b0 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
227c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
227d0 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
227e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
227f0 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
22800 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
22810 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
22820 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
22830 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
22840 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
22850 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
22860 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
22870 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
22880 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
22890 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
228a0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
228b0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
228c0 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
228d0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
228e0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
228f0 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
22900 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
22910 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
22920 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
22930 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
22940 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
22950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22960 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
22970 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
22980 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
22990 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
229a0 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
229b0 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
229c0 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
229d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
229e0 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
229f0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22a00 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  en*,Select*,int,
22a10 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
22a20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22a30 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
22a40 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22a50 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
22a60 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
22a70 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
22a80 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
22a90 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22aa0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
22ab0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
22ac0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
22ad0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
22ae0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
22af0 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
22b00 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
22b10 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
22b20 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22b30 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22b40 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
22b50 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
22b60 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22b80 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
22b90 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
22ba0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22bb0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
22bc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
22bd0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
22be0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22bf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22c00 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
22c10 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
22c20 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
22c30 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22c40 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
22c50 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
22c60 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
22c70 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22c80 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
22c90 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
22ca0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
22cb0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
22cc0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
22cd0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
22ce0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
22cf0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
22d00 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
22d10 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
22d20 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22d30 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
22d40 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
22d50 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22d60 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
22d70 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22d80 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
22d90 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22da0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
22db0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
22dc0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
22dd0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22de0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
22df0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
22e00 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
22e10 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
22e50 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
22e60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22e70 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
22e80 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
22e90 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
22ea0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
22eb0 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
22ec0 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
22ed0 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
22ee0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
22ef0 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
22f00 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22f10 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
22f20 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
22f30 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
22f40 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
22f50 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
22f60 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
22f70 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
22f80 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22f90 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
22fa0 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64  lite3AllocateInd
22fb0 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33  exObject(sqlite3
22fc0 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a  *,i16,int,char**
22fd0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
22fe0 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
22ff0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
23000 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
23010 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
23020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23030 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
23040 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23050 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
23060 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
23070 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
23080 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
23090 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
230a0 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
230b0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
230c0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
230d0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
230e0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
23110 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
23120 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
23130 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
23140 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
23150 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
23160 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
23170 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
23180 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
23190 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
231a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
231b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
231c0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
231d0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
231e0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
231f0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
23200 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
23210 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
23220 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
23230 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
23240 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
23250 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
23260 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
23270 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
23280 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
23290 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
232a0 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
232b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
232c0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
232d0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
232e0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
232f0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
23300 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
23310 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
23320 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
23330 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
23340 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
23350 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23360 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
23370 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74  nfo*);.u64 sqlit
23380 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
23390 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
233a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
233b0 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
233c0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
233d0 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
233e0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
233f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
23400 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
23410 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23420 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
23430 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
23440 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23450 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
23460 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23470 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
23480 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
23490 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
234a0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
234b0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
234c0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
234d0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
234e0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
234f0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
23500 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
23510 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23520 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
23530 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
23540 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
23550 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23560 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
23570 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
23580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23590 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
235a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
235b0 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
235c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
235d0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
235e0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
235f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23600 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
23610 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23620 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
23630 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
23640 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
23650 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23660 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
23670 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23680 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
23690 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
236a0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
236b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
236c0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
236d0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
236e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
236f0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
23700 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
23710 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23720 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
23730 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23740 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23750 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
23760 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23770 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23780 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
23790 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
237a0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
237b0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
237c0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
237d0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
237e0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
237f0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
23800 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
23810 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
23820 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76  stant terms */.v
23830 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
23840 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
23850 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
23860 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23870 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
23880 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
23890 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
238a0 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
238b0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
238c0 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
238d0 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
238e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
238f0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23900 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
23910 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
23920 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63  se*,int isView,c
23930 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
23940 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
23950 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
23960 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69  bleItem(Parse*,i
23970 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74  nt isView,struct
23980 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
23990 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
239a0 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
239b0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
239c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
239d0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
239e0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
239f0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
23a00 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
23a10 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
23a20 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
23a30 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
23a40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23a50 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
23a60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
23a70 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
23a80 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
23a90 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
23aa0 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
23ab0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
23ac0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
23ad0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
23ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23af0 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
23b00 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
23b10 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
23b20 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
23b30 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72  Expr(Expr*, Expr
23b40 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23b50 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
23b60 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
23b70 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
23b80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23b90 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
23ba0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
23bb0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
23bc0 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
23bd0 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
23be0 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
23bf0 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
23c00 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
23c10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
23c20 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
23c30 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
23c40 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
23c50 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
23c60 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
23c70 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23c80 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
23c90 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
23ca0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
23cb0 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
23cc0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23cd0 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
23ce0 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
23cf0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
23d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23d10 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
23d20 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
23d30 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
23d40 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
23d50 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23d60 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
23d70 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
23d80 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
23d90 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
23da0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
23db0 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
23dc0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
23dd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
23de0 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
23df0 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
23e00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23e10 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
23e20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23e30 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
23e40 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
23e50 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
23e60 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
23e70 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
23e80 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
23e90 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
23ea0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
23eb0 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
23ec0 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
23ed0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
23ee0 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
23ef0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
23f00 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
23f10 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
23f20 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
23f30 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
23f40 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
23f50 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
23f60 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
23f70 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
23f80 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
23f90 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a  ,i16,u8,u8,u8);.
23fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
23fb0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
23fc0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
23fd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23fe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
23ff0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
24000 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
24010 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
24020 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
24030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24040 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
24050 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
24060 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
24070 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
24080 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
24090 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
240a0 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
240d0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
240e0 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
240f0 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
24100 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
24110 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
24120 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
24130 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
24140 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
24150 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
24160 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
24170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
24180 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
24190 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
241a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
241b0 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
241c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
241d0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
241e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
241f0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
24200 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
24210 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
24220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
24230 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
24240 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
24250 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24260 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
24270 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
24280 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
24290 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
242a0 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
242b0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
242c0 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
242d0 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
242e0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
242f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
24300 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
24310 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
24320 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
24330 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
24340 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
24350 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
24360 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
24370 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
24380 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
24390 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
243a0 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
243b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
243c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
243d0 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
243e0 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
243f0 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
24400 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
24410 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
24420 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
24430 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
24440 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
24450 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
24460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24470 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
24480 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
24490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
244a0 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
244b0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
244c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
244d0 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
244e0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
244f0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
24500 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
24510 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
24520 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
24530 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
24540 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
24550 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
24560 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
24570 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
24580 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24590 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
245a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
245b0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
245c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
245d0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
245e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
245f0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
24600 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
24610 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
24620 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
24630 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
24640 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
24670 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
24680 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
24690 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
246a0 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
246b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
246c0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
246d0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
246e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
246f0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
24700 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
24710 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
24720 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
24730 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
24740 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
24750 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
24760 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
24770 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
24780 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
24790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
247a0 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
247b0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
247c0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
247d0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
24800 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
24810 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
24820 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
24830 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
24840 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
24850 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
24860 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
24870 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
24880 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
24890 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
248a0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
248b0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
248c0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
248d0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
248e0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
248f0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
24900 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
24910 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
24920 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
24930 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
24940 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
24950 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
24980 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
24990 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
249a0 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
249b0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
249c0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
249d0 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
249e0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
249f0 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
24a00 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
24a10 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
24a20 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
24a30 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
24a40 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
24a50 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24a60 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
24a70 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
24a80 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
24a90 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
24aa0 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
24ab0 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
24ac0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
24ad0 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
24ae0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
24af0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
24b00 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
24b10 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
24b20 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24b30 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
24b40 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
24b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
24b60 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
24b70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24b80 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
24b90 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
24ba0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
24bb0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
24bc0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24bd0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24be0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
24bf0 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
24c00 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24c10 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
24c20 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
24c30 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
24c40 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
24c50 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
24c60 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
24c70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
24c80 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
24c90 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
24ca0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
24cb0 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
24cc0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
24cd0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24ce0 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
24cf0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
24d00 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
24d10 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
24d20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24d30 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
24d40 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
24d50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24d60 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
24d70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
24d80 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
24d90 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
24da0 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
24db0 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
24dc0 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
24dd0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24de0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24df0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
24e00 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
24e10 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
24e20 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
24e30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24e40 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
24e50 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
24e60 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
24e70 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
24e80 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
24e90 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
24ea0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
24eb0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
24ec0 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
24ed0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
24ee0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
24ef0 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
24f00 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24f10 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
24f20 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
24f30 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
24f40 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
24f50 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
24f60 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
24f70 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
24f80 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24f90 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
24fa0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
24fb0 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
24fc0 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
24fd0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
24fe0 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
24ff0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
25000 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
25010 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
25020 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
25030 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
25040 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
25050 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
25060 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
25070 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
25080 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
25090 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
250a0 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
250b0 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
250c0 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
250d0 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
250e0 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
250f0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
25100 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
25110 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
25120 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
25130 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
25140 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
25150 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
25160 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
25170 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
25180 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
25190 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
251a0 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
251b0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
251c0 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
251d0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
251e0 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
251f0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
25200 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
25210 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
25220 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25230 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
25240 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
25250 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
25260 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
25270 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
25280 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
25290 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
252a0 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
252b0 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
252c0 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
252d0 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
252e0 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
252f0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
25300 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
25310 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
25320 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
25330 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
25340 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
25350 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
25360 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
25370 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
25380 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
25390 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
253a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
253b0 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
253c0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
253d0 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
253e0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
253f0 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
25400 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
25410 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
25420 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
25430 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
25440 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
25450 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
25460 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
25470 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
25480 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
25490 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
254a0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
254b0 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
254c0 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
254d0 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
254e0 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
254f0 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
25500 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
25510 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
25520 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
25530 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
25540 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
25550 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
25560 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
25570 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
25580 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
25590 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
255a0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
255b0 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
255c0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
255d0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
255e0 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
255f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25600 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
25610 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
25620 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
25630 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
25640 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
25650 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
25660 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
25670 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
25680 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
25690 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
256a0 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
256b0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
256c0 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
256d0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
256e0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
256f0 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
25700 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
25710 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
25720 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
25730 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
25740 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
25750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
25760 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
25770 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
25780 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
25790 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
257a0 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
257b0 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
257c0 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
257d0 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
257e0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
257f0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
25800 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
25810 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
25820 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
25830 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
25840 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
25850 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
25860 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
25870 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
25880 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
25890 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
258a0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
258b0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
258c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
258d0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
258e0 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
258f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25900 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
25910 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25920 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
25930 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
25940 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
25950 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
25960 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
25970 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
25980 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
25990 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
259a0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
259b0 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
259c0 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
259d0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
259e0 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
259f0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
25a00 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
25a10 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
25a20 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
25a30 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
25a40 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
25a50 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
25a60 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
25a70 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
25a80 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25a90 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
25aa0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
25ab0 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
25ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
25ad0 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
25ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
25af0 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
25b00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25b10 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
25b20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
25b30 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
25b40 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
25b50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
25b60 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
25b70 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
25b80 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
25b90 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
25ba0 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
25bb0 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
25bc0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25bd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
25be0 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
25bf0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
25c00 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
25c10 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
25c20 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
25c30 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20  oid *,u8, .     
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
25c60 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
25c70 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
25c80 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
25c90 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
25ca0 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
25cb0 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
25cc0 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
25cd0 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
25ce0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
25cf0 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
25d00 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
25d10 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
25d20 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
25d30 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
25d40 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
25d50 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
25d60 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
25d70 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
25d80 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
25d90 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
25da0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
25db0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
25dc0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
25dd0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
25de0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
25df0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25e00 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
25e10 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
25e20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
25e30 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
25e40 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
25e50 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
25e60 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
25e70 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
25e80 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
25e90 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
25ea0 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
25eb0 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
25ec0 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
25ed0 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
25ee0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
25ef0 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
25f00 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
25f10 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
25f20 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
25f30 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
25f40 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
25f50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25f60 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
25f70 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
25f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25f90 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
25fa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25fb0 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
25fc0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
25fd0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
25fe0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
25ff0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
26000 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
26010 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
26020 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
26030 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
26040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26050 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
26060 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
26070 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
26080 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
26090 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
260a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
260b0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
260c0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
260d0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
260e0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
260f0 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
26100 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
26110 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
26120 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
26130 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
26140 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26150 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
26160 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
26170 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
26180 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
26190 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
261a0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
261b0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
261c0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
261d0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
261e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
261f0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
26200 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
26210 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
26220 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
26230 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
26240 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
26250 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
26260 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26270 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
26280 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
26290 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
262a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
262b0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
262c0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
262d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
262e0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
262f0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
26300 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
26310 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
26320 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
26330 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
26340 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
26350 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
26360 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
26370 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
26380 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
26390 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
263a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
263b0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
263c0 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
263d0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
263e0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
263f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26400 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
26410 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
26420 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
26430 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
26440 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
26450 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26460 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
26470 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
26480 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
26490 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
264a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
264b0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
264c0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
264d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
264e0 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
264f0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
26500 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
26510 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
26520 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
26530 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26540 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
26550 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
26560 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
26570 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
26580 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
26590 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
265a0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
265b0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
265c0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
265d0 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
265e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
265f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
26600 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
26610 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
26620 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
26630 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
26640 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
26650 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
26660 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
26670 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
26680 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
26690 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
266a0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
266b0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
266c0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
266d0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
266e0 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
266f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
26700 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
26710 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
26720 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
26730 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
26740 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
26750 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
26760 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
26770 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
26780 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
26790 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
267a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
267b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
267c0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
267d0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
267e0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
267f0 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
26800 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
26810 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26820 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
26830 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
26840 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
26850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26860 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
26870 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
26880 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
26890 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
268a0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
268b0 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
268c0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
268d0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
268e0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
268f0 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
26900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
26910 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
26920 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
26930 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26940 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
26950 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
26960 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
26970 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
26980 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
26990 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
269a0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
269b0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
269c0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
269d0 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
269e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
269f0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
26a00 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
26a10 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
26a20 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
26a30 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
26a40 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
26a50 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
26a60 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
26a70 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
26a80 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
26a90 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
26aa0 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
26ab0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
26ac0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
26ad0 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
26ae0 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
26af0 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
26b00 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
26b10 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
26b20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
26b30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
26b40 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
26b50 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
26b60 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
26b70 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
26b80 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
26b90 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
26ba0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
26bb0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
26bc0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
26bd0 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
26be0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
26bf0 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
26c00 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
26c10 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
26c20 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
26c30 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
26c40 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
26c50 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
26c60 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
26c70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
26c80 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
26c90 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
26ca0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
26cb0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
26cc0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
26cd0 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
26ce0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
26cf0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
26d00 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
26d10 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
26d20 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
26d30 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
26d40 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
26d50 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
26d60 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
26d70 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
26d80 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
26d90 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
26da0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
26db0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
26dc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26dd0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
26de0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
26df0 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
26e00 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
26e10 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
26e20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26e30 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
26e40 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26e50 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
26e60 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26e70 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
26e80 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
26e90 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
26ea0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26eb0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
26ec0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26ed0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
26ee0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26ef0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26f00 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
26f10 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26f20 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26f30 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
26f40 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
26f50 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
26f60 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
26f70 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
26f80 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
26f90 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
26fa0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
26fb0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26fc0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
26fd0 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
26fe0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
26ff0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
27000 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
27010 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
27020 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
27030 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
27040 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
27050 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27060 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
27070 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
27080 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
27090 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
270a0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
270b0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
270c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
270d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
270e0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
270f0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
27100 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
27110 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
27120 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
27130 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
27140 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
27150 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
27160 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
27170 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
27180 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27190 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
271a0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
271b0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
271c0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
271d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
271e0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
271f0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
27200 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
27210 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
27220 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
27230 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
27240 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
27250 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
27260 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
27270 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
27280 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
27290 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
272a0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
272b0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
272c0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
272d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
272e0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
272f0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
27300 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
27310 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
27320 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
27330 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
27340 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
27350 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
27360 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
27370 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
27380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
27390 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
273a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
273b0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
273c0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
273d0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
273e0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
273f0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
27400 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
27410 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
27420 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
27430 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27440 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
27450 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
27460 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
27470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27480 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
27490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
274a0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
274b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
274c0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
274d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
274e0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
274f0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
27500 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
27510 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
27520 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
27530 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
27540 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
27550 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
27560 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
27570 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
27580 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27590 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
275a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
275b0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
275c0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
275d0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
275e0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
275f0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
27600 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
27610 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
27620 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
27630 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
27640 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
27650 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
27660 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
27670 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
27680 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
27690 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
276a0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
276b0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
276c0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
276d0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
276e0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
276f0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27700 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
27710 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
27720 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
27730 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
27740 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
27750 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
27760 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
27770 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
27780 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
27790 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
277a0 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
277b0 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
277c0 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
277d0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
277e0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
277f0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
27800 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
27810 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
27820 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
27830 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
27840 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
27850 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
27860 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
27870 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
27880 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
27890 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
278a0 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
278b0 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
278c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
278d0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
278e0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
278f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27900 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
27910 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
27920 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27930 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
27940 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
27950 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27960 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
27970 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
27980 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
27990 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
279a0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
279b0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
279c0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
279d0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
279e0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
279f0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
27a00 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
27a10 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
27a20 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
27a30 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
27a40 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27a50 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
27a60 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
27a70 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
27a80 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
27a90 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27aa0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
27ab0 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
27ac0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
27ad0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
27ae0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
27af0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
27b00 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
27b10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27b20 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
27b30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
27b40 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
27b50 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
27b60 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
27b70 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
27b80 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
27b90 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
27ba0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27bb0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
27bc0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
27bd0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
27be0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
27bf0 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
27c00 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
27c10 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
27c20 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
27c30 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
27c40 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
27c50 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
27c60 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
27c70 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
27c80 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
27c90 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
27ca0 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
27cb0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
27cc0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
27cd0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
27ce0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
27cf0 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
27d00 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
27d10 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
27d20 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
27d30 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
27d40 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
27d50 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
27d60 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27d70 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
27d80 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
27d90 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
27da0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27db0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
27dc0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
27dd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
27de0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
27df0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
27e00 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
27e10 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
27e20 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
27e30 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27e40 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
27e50 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
27e60 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
27e70 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
27e80 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
27e90 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
27ea0 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
27eb0 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
27ec0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
27ed0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
27ee0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
27ef0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
27f00 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
27f10 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
27f20 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
27f30 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
27f40 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
27f50 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
27f60 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
27f70 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
27f80 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
27f90 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
27fa0 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
27fb0 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
27fc0 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
27fd0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
27fe0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
27ff0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
28000 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
28010 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
28020 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
28030 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
28040 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
28050 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
28060 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
28070 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
28080 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
28090 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
280a0 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
280b0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
280c0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
280d0 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
280e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
280f0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
28100 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
28110 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
28120 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
28130 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
28140 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
28150 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
28160 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
28170 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
28180 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
28190 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
281a0 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
281b0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
281c0 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
281d0 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
281e0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
281f0 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
28200 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
28210 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28220 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
28230 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
28240 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
28250 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
28260 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
28270 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
28280 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
28290 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
282a0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
282b0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
282c0 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
282d0 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
282e0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
282f0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
28300 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
28310 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
28320 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
28330 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28340 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
28350 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
28360 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28370 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
28380 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
28390 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
283a0 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
283b0 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
283c0 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
283d0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
283e0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
283f0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
28400 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
28410 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
28420 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
28430 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
28440 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
28450 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28460 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
28470 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
28480 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28490 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
284a0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
284b0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
284c0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
284d0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
284e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
284f0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
28500 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
28510 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
28520 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
28530 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
28540 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
28550 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
28560 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
28570 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
28580 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
28590 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
285a0 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
285b0 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
285c0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
285d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
285e0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
285f0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
28600 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
28610 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
28620 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28630 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
28640 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
28650 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
28660 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
28670 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
28680 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
28690 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
286a0 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
286b0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
286c0 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
286d0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
286e0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
286f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
28700 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
28710 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
28720 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
28730 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
28740 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
28750 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
28760 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
28770 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
28780 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
28790 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
287a0 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
287b0 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
287c0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
287d0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
287e0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
287f0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
28800 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28810 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
28820 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
28830 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
28840 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
28850 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
28860 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
28870 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
28880 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
28890 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
288a0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
288b0 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
288c0 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
288d0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
288e0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
288f0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
28900 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
28910 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
28920 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
28930 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
28940 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
28950 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
28960 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
28970 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
28980 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28990 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
289a0 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
289b0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
289c0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
289d0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
289e0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
289f0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
28a00 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
28a10 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
28a20 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
28a30 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
28a40 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
28a50 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
28a60 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
28a70 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
28a80 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
28a90 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
28aa0 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
28ab0 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
28ac0 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
28ad0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
28ae0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
28af0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
28b00 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
28b10 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
28b20 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
28b30 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
28b40 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
28b50 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
28b60 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
28b70 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
28b80 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
28b90 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
28ba0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
28bb0 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
28bc0 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
28bd0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
28be0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
28bf0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
28c00 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
28c10 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
28c20 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
28c30 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
28c40 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
28c50 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
28c60 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
28c70 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
28c80 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
28c90 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
28ca0 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
28cb0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28cc0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
28cd0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
28ce0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
28cf0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
28d00 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
28d10 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
28d20 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
28d30 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
28d40 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28d50 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
28d60 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
28d70 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
28d80 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
28d90 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
28da0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
28db0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
28dc0 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
28dd0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
28de0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
28df0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
28e00 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
28e10 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
28e20 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
28e30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
28e40 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28e50 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
28e60 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
28e70 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
28e80 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
28e90 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
28ea0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
28eb0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
28ec0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
28ed0 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
28ee0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
28ef0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
28f00 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
28f10 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
28f20 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
28f30 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
28f40 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
28f50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
28f60 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
28f70 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
28f80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
28f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
28fa0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
28fb0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
28fc0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
28fd0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
28fe0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
28ff0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
29000 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.