/ Hex Artifact Content
Login

Artifact 340fc115a707838ad365b52057f126b143f6aa60:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a10: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
1a20: 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e   compiler intrin
1a30: 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20 61  sics we desire a
1a40: 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a  re enabled when.
1a50: 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  ** compiling wit
1a60: 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
1a70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43   version of MSVC
1a80: 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65   unless prevente
1a90: 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49  d by.** the SQLI
1aa0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1ab0: 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a  NSIC define..*/.
1ac0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ad0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1ae0: 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65 66  INSIC).#  if def
1af0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1b00: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30  & _MSC_VER>=1300
1b10: 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e 65  .#    if !define
1b20: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20  d(_WIN32_WCE).# 
1b30: 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e       include <in
1b40: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70  trin.h>.#      p
1b50: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
1b60: 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74  _byteswap_ushort
1b70: 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  ).#      pragma 
1b80: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
1b90: 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20  wap_ulong).#    
1ba0: 65 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c  else.#      incl
1bb0: 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68  ude <cmnintrin.h
1bc0: 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20  >.#    endif.#  
1bd0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1be0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
1bf0: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
1c00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1c10: 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a  as 0, 1, or 2..*
1c20: 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65  * 0 means mutexe
1c30: 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c  s are permanentl
1c40: 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68  y disable and th
1c50: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76  e library is nev
1c60: 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65  er.** threadsafe
1c70: 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  1 means the l
1c80: 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c  ibrary is serial
1c90: 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68  ized which is th
1ca0: 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76  e highest.** lev
1cb0: 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65  el of threadsafe
1cc0: 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  ty.  2 means the
1cd0: 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74   library is mult
1ce0: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1cf0: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1d00: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1d10: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1d20: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
1d30: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
1d40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1d50: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
1d60: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
1d70: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
1d80: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1d90: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1da0: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1db0: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1dc0: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1dd0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1de0: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1df0: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1e00: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1e10: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1e20: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
1e30: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
1e40: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
1e50: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
1e60: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
1e70: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e80: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1e90: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1ea0: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1eb0: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1ec0: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1ed0: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1ee0: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1ef0: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1f00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f10: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1f20: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
1f30: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1f40: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
1f50: 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45  ../*.** EVIDENCE
1f60: 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30  -OF: R-25715-370
1f70: 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  72 Memory alloca
1f80: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
1f90: 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a  are enabled by.*
1fa0: 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73  * default unless
1fb0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
1fc0: 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f  led with SQLITE_
1fd0: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1fe0: 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20  S=0 in.** which 
1ff0: 63 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  case memory allo
2000: 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  cation statistic
2010: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62  s are disabled b
2020: 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  y default..*/.#i
2030: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2040: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
2050: 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TUS).# define SQ
2060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2070: 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a  STATUS 1.#endif.
2080: 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f  ./*.** Exactly o
2090: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
20a0: 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20  ing macros must 
20b0: 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72  be defined in or
20c0: 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66  der to.** specif
20d0: 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61  y which memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73  llocation subsys
20f0: 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a  tem to use..**.*
2100: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53  *     SQLITE_SYS
2110: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  TEM_MALLOC      
2120: 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61      // Use norma
2130: 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  l system malloc(
2140: 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  ).**     SQLITE_
2150: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20  WIN32_MALLOC    
2160: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69         // Use Wi
2170: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
2180: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
2190: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20  E_ZERO_MALLOC   
21a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
21b0: 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72  a stub allocator
21c0: 20 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69   that always fai
21d0: 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ls.**     SQLITE
21e0: 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20  _MEMDEBUG       
21f0: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67          // Debug
2200: 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20  ging version of 
2210: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2220: 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73  **.** On Windows
2230: 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  , if the SQLITE_
2240: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c  WIN32_MALLOC_VAL
2250: 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64  IDATE macro is d
2260: 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a  efined and the.*
2270: 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f  * assert() macro
2280: 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63   is enabled, eac
2290: 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  h call into the 
22a0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
22b0: 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77  p subsystem.** w
22c0: 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61  ill cause HeapVa
22d0: 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c  lidate to be cal
22e0: 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61  led.  If heap va
22f0: 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  lidation should 
2300: 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65  fail, an.** asse
2310: 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72  rtion will be tr
2320: 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  iggered..**.** I
2330: 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62  f none of the ab
2340: 6f 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c  ove are defined,
2350: 20 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45   then set SQLITE
2360: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61  _SYSTEM_MALLOC a
2370: 73 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  s.** the default
2380: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2390: 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d  (SQLITE_SYSTEM_M
23a0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
23b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
23c0: 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  2_MALLOC) \.  + 
23d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a  defined(SQLITE_Z
23e0: 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  ERO_MALLOC) \.  
23f0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2400: 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65  _MEMDEBUG)>1.# e
2410: 72 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72  rror "Two or mor
2420: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2430: 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ng compile-time 
2440: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
2450: 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69  tions\. are defi
2460: 6e 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20  ned but at most 
2470: 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c  one is allowed:\
2480: 0a 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  . SQLITE_SYSTEM_
2490: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57  MALLOC, SQLITE_W
24a0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  IN32_MALLOC, SQL
24b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20  ITE_MEMDEBUG,\. 
24c0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
24d0: 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  OC".#endif.#if d
24e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
24f0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
2500: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2510: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
2520: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2540: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2550: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2560: 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ==0.# define SQL
2570: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2580: 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  C 1.#endif../*.*
2590: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c  * If SQLITE_MALL
25a0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73  OC_SOFT_LIMIT is
25b0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
25c0: 74 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a  try to keep the.
25d0: 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f  ** sizes of memo
25e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62  ry allocations b
25f0: 65 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20  elow this value 
2600: 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a  where possible..
2610: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2620: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2630: 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69  FT_LIMIT).# defi
2640: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ne SQLITE_MALLOC
2650: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34  _SOFT_LIMIT 1024
2660: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57  .#endif../*.** W
2670: 65 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65  e need to define
2680: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61   _XOPEN_SOURCE a
2690: 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64  s follows in ord
26a0: 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20  er to enable.** 
26b0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
26c0: 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73  s on most Unix s
26d0: 79 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f  ystems and fchmo
26e0: 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a  d() on OpenBSD..
26f0: 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f  ** But _XOPEN_SO
2700: 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73  URCE define caus
2710: 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20  es problems for 
2720: 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69  Mac OS X, so omi
2730: 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20  t.** it..*/.#if 
2740: 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f  !defined(_XOPEN_
2750: 53 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69  SOURCE) && !defi
2760: 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20  ned(__DARWIN__) 
2770: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50  && !defined(__AP
2780: 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65  PLE__).#  define
2790: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36   _XOPEN_SOURCE 6
27a0: 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  00.#endif../*.**
27b0: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
27c0: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
27d0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
27e0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
27f0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
2800: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
2810: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2820: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
2830: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
2840: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
2850: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
2860: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
2870: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
2880: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
2890: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
28a0: 20 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64   and faster by d
28b0: 69 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20  isabling the.** 
28c0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
28d0: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e  nts in the code.
28e0: 20 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65    So we want the
28f0: 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a   default action.
2900: 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45  ** to be for NDE
2910: 42 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e  BUG to be set an
2920: 64 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75  d NDEBUG to be u
2930: 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66  ndefined only if
2940: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a   SQLITE_DEBUG.**
2950: 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e   is set.  Thus N
2960: 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e  DEBUG becomes an
2970: 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74   opt-in rather t
2980: 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a  han an opt-out.*
2990: 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69  * feature..*/.#i
29a0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
29b0: 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  G) && !defined(S
29c0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20  QLITE_DEBUG) .# 
29d0: 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a  define NDEBUG 1.
29e0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
29f0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 64 65  ed(NDEBUG) && de
2a00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2a10: 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42  UG).# undef NDEB
2a20: 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  UG.#endif../*.**
2a30: 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45   Enable SQLITE_E
2a40: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
2a50: 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45  MMENTS if SQLITE
2a60: 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e 65 64  _DEBUG is turned
2a70: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   on..*/.#if !def
2a80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a90: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2aa0: 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65 64 28  NTS) && defined(
2ab0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20  SQLITE_DEBUG).# 
2ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
2ad0: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
2ae0: 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a  MENTS 1.#endif..
2af0: 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61  /*.** The testca
2b00: 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  se() macro is us
2b10: 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76  ed to aid in cov
2b20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20  erage testing.  
2b30: 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63  When .** doing c
2b40: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c  overage testing,
2b50: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
2b60: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
2b70: 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73  nt to.** testcas
2b80: 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c  e() must be eval
2b90: 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20  uated both true 
2ba0: 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64  and false in ord
2bb0: 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c  er to.** get ful
2bc0: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
2bd0: 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65  e.  The testcase
2be0: 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65  () macro is inse
2bf0: 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20  rted.** to help 
2c00: 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20  ensure adequate 
2c10: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e  test coverage in
2c20: 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69   places where si
2c30: 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  mple.** conditio
2c40: 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72  n/decision cover
2c50: 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74  age is inadequat
2c60: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
2c70: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2c80: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
2c90: 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79  ke sure boundary
2ca0: 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74   values are test
2cb0: 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d  ed.  For.** bitm
2cc0: 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63  ask tests, testc
2cd0: 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65  ase() can be use
2ce0: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
2cf0: 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69  ach bit.** is si
2d00: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73  gnificant and us
2d10: 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
2d20: 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61  .  On switch sta
2d30: 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65  tements.** where
2d40: 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20   multiple cases 
2d50: 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62  go to the same b
2d60: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65  lock of code, te
2d70: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2d80: 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20  insure that all 
2d90: 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61  cases are evalua
2da0: 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65  ted..**.*/.#ifde
2db0: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
2dc0: 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  E_TEST.  void sq
2dd0: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e  lite3Coverage(in
2de0: 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73  t);.# define tes
2df0: 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20  tcase(X)  if( X 
2e00: 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  ){ sqlite3Covera
2e10: 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a  ge(__LINE__); }.
2e20: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74  #else.# define t
2e30: 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69  estcase(X).#endi
2e40: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53  f../*.** The TES
2e50: 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75  TONLY macro is u
2e60: 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76  sed to enclose v
2e70: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
2e80: 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72  ions or.** other
2e90: 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68   bits of code th
2ea0: 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f  at are needed to
2eb0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67   support the arg
2ec0: 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e  uments.** within
2ed0: 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20   testcase() and 
2ee0: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e  assert() macros.
2ef0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2f00: 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  (NDEBUG) || defi
2f10: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2f20: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2f30: 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20  ne TESTONLY(X)  
2f40: 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  X.#else.# define
2f50: 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e   TESTONLY(X).#en
2f60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74  dif../*.** Somet
2f70: 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73  imes we need a s
2f80: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63  mall amount of c
2f90: 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61  ode such as a va
2fa0: 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a  riable initializ
2fb0: 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75  ation.** to setu
2fc0: 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73  p for a later as
2fd0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2fe0: 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e  .  We do not wan
2ff0: 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a  t this code to.*
3000: 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73  * appear when as
3010: 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
3020: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
3030: 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72  ng macro is ther
3040: 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  efore.** used to
3050: 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65   contain that se
3060: 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22  tup code.  The "
3070: 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61  VVA" acronym sta
3080: 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69  nds for.** "Veri
3090: 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
30a0: 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64  tion, and Accred
30b0: 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74  itation".  In ot
30c0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a  her words, the.*
30d0: 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56  * code within VV
30e0: 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e  A_ONLY() will on
30f0: 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65  ly run during ve
3100: 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65  rification proce
3110: 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  sses..*/.#ifndef
3120: 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65   NDEBUG.# define
3130: 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a   VVA_ONLY(X)  X.
3140: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
3150: 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  VA_ONLY(X).#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57  f../*.** The ALW
3170: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61  AYS and NEVER ma
3180: 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f  cros surround bo
3190: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
31a0: 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20  s which .** are 
31b0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
31c0: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
31d0: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
31e0: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
31f0: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
3200: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
3210: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
3220: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
3230: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
3240: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
3250: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
3260: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
3270: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
3280: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
3290: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
32a0: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
32b0: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
32c0: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
32d0: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
32e0: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
32f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
3300: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
3310: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
3320: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3330: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3340: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
3350: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
3360: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
3370: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3380: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
3390: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
33a0: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
33b0: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
33c0: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
33d0: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
33e0: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
33f0: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
3400: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
3410: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3420: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3430: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3440: 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64  (X)      (1).# d
3450: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
3460: 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21       (0).#elif !
3470: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a  defined(NDEBUG).
3480: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
3490: 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28  X)      ((X)?1:(
34a0: 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20  assert(0),0)).# 
34b0: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
34c0: 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65        ((X)?(asse
34d0: 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73  rt(0),1):0).#els
34e0: 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  e.# define ALWAY
34f0: 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20  S(X)      (X).# 
3500: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3510: 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66        (X).#endif
3520: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74  ../*.** Declarat
3530: 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72  ions used for tr
3540: 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74  acing the operat
3550: 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72  ing system inter
3560: 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  faces..*/.#if de
3570: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52  fined(SQLITE_FOR
3580: 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  CE_OS_TRACE) || 
3590: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
35a0: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
35b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
35c0: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
35d0: 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20  S_WIN).  extern 
35e0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61  int sqlite3OSTra
35f0: 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  ce;.# define OST
3600: 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20  RACE(X)         
3610: 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72   if( sqlite3OSTr
3620: 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62  ace ) sqlite3Deb
3630: 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66  ugPrintf X.# def
3640: 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ine SQLITE_HAVE_
3650: 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23  OS_TRACE.#else.#
3660: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3670: 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  X).# undef  SQLI
3680: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
3690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
36a0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72  s the sqlite3Err
36b0: 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  Name() function 
36c0: 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75  needed in the bu
36d0: 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ild?  Currently,
36e0: 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64  .** it is needed
36f0: 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63   by "mutex_w32.c
3700: 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e  " (when debuggin
3710: 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28  g), "os_win.c" (
3720: 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20  when.** OSTRACE 
3730: 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64  is enabled), and
3740: 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73   by several "tes
3750: 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69  t*.c" files (whi
3760: 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c  ch are.** compil
3770: 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ed using SQLITE_
3780: 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65  TEST)..*/.#if de
3790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
37a0: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
37b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
37c0: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
37d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
37e0: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
37f0: 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53  _WIN).# define S
3800: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3810: 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65  AME.#else.# unde
3820: 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  f  SQLITE_NEED_E
3830: 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a  RR_NAME.#endif..
3840: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
3850: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
3860: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
3870: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3880: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
3890: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
38a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
38b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
38c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
38d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
38e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
38f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
3900: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
3910: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
3920: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
3930: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
3940: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
3950: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
3960: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
3970: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
3980: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
3990: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
39a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
39b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
39c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
39d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
39e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
39f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
3a00: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
3a10: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
3a20: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
3a30: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
3a40: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
3a50: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
3a60: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
3a70: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
3a80: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
3a90: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
3aa0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
3ab0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
3ac0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
3ad0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
3ae0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
3af0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
3b00: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
3b10: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
3b20: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
3b30: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
3b40: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  ef.h>../*.** If 
3b50: 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20  compiling for a 
3b60: 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c  processor that l
3b70: 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f  acks floating po
3b80: 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20  int support,.** 
3b90: 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67  substitute integ
3ba0: 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er for floating-
3bb0: 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20  point.*/.#ifdef 
3bc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3bd0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
3be0: 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74  ine double sqlit
3bf0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3c00: 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e   float sqlite_in
3c10: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  t64.# define LON
3c20: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c  GDOUBLE_TYPE sql
3c30: 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64  ite_int64.# ifnd
3c40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
3c50: 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  L.#   define SQL
3c60: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73  ITE_BIG_DBL (((s
3c70: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c  qlite3_int64)1)<
3c80: 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64  <50).# endif.# d
3c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
3ca0: 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
3cb0: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3cc0: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a  TE_OMIT_TRACE 1.
3cd0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
3ce0: 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49  IXED_ENDIAN_64BI
3cf0: 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20  T_FLOAT.# undef 
3d00: 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41  SQLITE_HAVE_ISNA
3d10: 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  N.#endif.#ifndef
3d20: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3d30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d40: 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23  BIG_DBL (1e99).#
3d50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49  endif../*.** OMI
3d60: 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20  T_TEMPDB is set 
3d70: 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f  to 1 if SQLITE_O
3d80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65  MIT_TEMPDB is de
3d90: 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61  fined, or 0.** a
3da0: 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67  fterward. Having
3db0: 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f   this macro allo
3dc0: 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74  ws us to cause t
3dd0: 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a  he C compiler .*
3de0: 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75  * to omit code u
3df0: 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c  sed by TEMP tabl
3e00: 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79  es without messy
3e10: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
3e20: 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  nts..*/.#ifdef S
3e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
3e40: 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  B.#define OMIT_T
3e50: 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64  EMPDB 1.#else.#d
3e60: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3e70: 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B 0.#endif../*.*
3e80: 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d  * The "file form
3e90: 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e  at" number is an
3ea0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
3eb0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
3ec0: 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42  never.** the VDB
3ed0: 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72  E-level file for
3ee0: 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68  mat changes.  Th
3ef0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3f00: 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a  os define the.**
3f10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c   the default fil
3f20: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77  e format for new
3f30: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
3f40: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
3f50: 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74  format.** that t
3f60: 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72  he library can r
3f70: 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ead..*/.#define 
3f80: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f  SQLITE_MAX_FILE_
3f90: 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66  FORMAT 4.#ifndef
3fa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3fb0: 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65  FILE_FORMAT.# de
3fc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3fd0: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  ULT_FILE_FORMAT 
3fe0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
3ff0: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
4000: 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72  r triggers are r
4010: 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61  ecursive by defa
4020: 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62  ult.  This can b
4030: 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20  e.** changed at 
4040: 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61  run-time using a
4050: 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e   pragma..*/.#ifn
4060: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4070: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4080: 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53  GGERS.# define S
4090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
40a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
40b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
40c0: 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75   Provide a defau
40d0: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c  lt value for SQL
40e0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
40f0: 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74  n case it is not
4100: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e   specified.** on
4110: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
4120: 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
4130: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23  ITE_TEMP_STORE.#
4140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4150: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65  EMP_STORE 1.# de
4160: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
4170: 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20  _STORE_xc 1  /* 
4180: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
4190: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
41a0: 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75  /*.** If no valu
41b0: 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69  e has been provi
41c0: 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d  ded for SQLITE_M
41d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
41e0: 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49  S, or if.** SQLI
41f0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  TE_TEMP_STORE is
4200: 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72   set to 3 (never
4210: 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66   use temporary f
4220: 69 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a  iles), set it .*
4230: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
4240: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
4250: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
4260: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
4270: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
4280: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4290: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
42a0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
42b0: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
42c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
42e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
42f0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4300: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
4310: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4320: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
4330: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4340: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4350: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
4360: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
4370: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4380: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
4390: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
43a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
43b0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
43c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
43d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
43e0: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
43f0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4400: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4410: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
4420: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
4430: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
4440: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
4450: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
4460: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
4470: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
4480: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
4490: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
44a0: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
44b0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
44c0: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
44d0: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
44e0: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
44f0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
4500: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
4510: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
4520: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
4530: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4540: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
4550: 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65  _INITSZ.# define
4560: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4570: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 31 30  PCACHE_INITSZ 10
4580: 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  0.#endif.../*.**
4590: 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65   GCC does not de
45a0: 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f  fine the offseto
45b0: 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27  f() macro so we'
45c0: 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74  ll have to do it
45d0: 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a  .** ourselves..*
45e0: 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74  /.#ifndef offset
45f0: 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65  of.#define offse
4600: 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49  tof(STRUCTURE,FI
4610: 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61  ELD) ((int)((cha
4620: 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a  r*)&((STRUCTURE*
4630: 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e  )0)->FIELD)).#en
4640: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
4650: 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e  s to compute min
4660: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d  imum and maximum
4670: 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e   of two numbers.
4680: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28  .*/.#define MIN(
4690: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
46a0: 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d  ):(B)).#define M
46b0: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
46c0: 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a  ?(A):(B))../*.**
46d0: 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74   Swap two object
46e0: 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a  s of type TYPE..
46f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28  */.#define SWAP(
4700: 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20  TYPE,A,B) {TYPE 
4710: 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a  t=A; A=B; B=t;}.
4720: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
4730: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
4740: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
4750: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
4760: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
4770: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
4780: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
4790: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
47a0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
47b0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
47c0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
47d0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
47e0: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
47f0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
4800: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
4810: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
4820: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
4830: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
4840: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
4850: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
4860: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
4870: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
4880: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
4890: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
48a0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
48b0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
48c0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
48d0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
48e0: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
48f0: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4900: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4910: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4920: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4930: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4940: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4950: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4960: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
4970: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
4980: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4990: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
49a0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
49b0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
49c0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
49d0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
49e0: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
49f0: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4a00: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4a10: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4a20: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4a30: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4a40: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4a50: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4a60: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
4a70: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
4a80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4a90: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
4aa0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
4ab0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
4ac0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4ae0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4af0: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4b00: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4b10: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4b20: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4b30: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4b40: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4b50: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4b60: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
4b70: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
4b80: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
4b90: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
4ba0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4bb0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
4bc0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4bd0: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4be0: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4bf0: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4c00: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4c10: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4c20: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4c30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4c40: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4c50: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4c60: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
4c70: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
4c80: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4c90: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
4ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
4cb0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4cc0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4cd0: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4cf0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d00: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4d10: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4d30: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4d40: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4d50: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
4d70: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d80: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
4d90: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
4da0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
4db0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
4dc0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4dd0: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4de0: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4df0: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4e00: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4e10: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4e20: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4e30: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4e40: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4e50: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4e60: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
4e70: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
4e80: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
4e90: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
4ea0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
4eb0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
4ec0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4ed0: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4ee0: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4ef0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4f00: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4f10: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4f20: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4f30: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4f40: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4f50: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4f60: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
4f70: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
4f80: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
4f90: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
4fa0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
4fb0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
4fc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4fd0: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4fe0: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4ff0: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
5000: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
5010: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
5020: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
5030: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
5040: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
5050: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
5060: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
5070: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
5080: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
5090: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
50a0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
50b0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
50c0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
50d0: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
50e0: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
50f0: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
5100: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
5110: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
5120: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
5130: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
5140: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
5150: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
5160: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
5170: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
5180: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
5190: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
51a0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
51b0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
51c0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
51d0: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
51e0: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
51f0: 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  tities are suppo
5200: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
5210: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
5220: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
5230: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
5240: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
5250: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
5260: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
5270: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
5280: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
5290: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
52b0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
52c0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
52d0: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
52e0: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
52f0: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
5300: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
5310: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
5320: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
5330: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
5340: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
5350: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
5360: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
5370: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
5380: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
5390: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
53a0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
53b0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
53c0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
53d0: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
53e0: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
53f0: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
5400: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
5410: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
5420: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
5430: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
5440: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
5450: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
5460: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
5470: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
5480: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
5490: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
54a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
54b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
54c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
54d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
54e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
54f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
5500: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
5510: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
5520: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
5530: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
5540: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
5550: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
5560: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
5570: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
5580: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
5590: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
55a0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
55b0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
55c0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
55d0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
55e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
55f0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
5600: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
5610: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
5620: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
5630: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
5640: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
5650: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
5660: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
5670: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
5680: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
5690: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
56a0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
56b0: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
56c0: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
56d0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
56e0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
56f0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
5700: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
5710: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5720: 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65  ER=1 is set, the
5730: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
5740: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
5750: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
5760: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5770: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
5780: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
5790: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
57a0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
57b0: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
57c0: 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20   (defined(i386) 
57d0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
57e0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
57f0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5800: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5810: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
5820: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
5830: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
5840: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
5850: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
5860: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
5870: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
5880: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
5890: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
58a0: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
58b0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
58c0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
58d0: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
58e0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
58f0: 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69  R    1234.# defi
5900: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5910: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
5920: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
5930: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
5940: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5950: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
5960: 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28  6LE.#endif.#if (
5970: 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20  defined(sparc)  
5980: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70    || defined(__p
5990: 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26  pc__))  \.    &&
59a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
59b0: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
59c0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
59d0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
59e0: 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53   4321.# define S
59f0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5a00: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
5a10: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5a20: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
5a30: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5a40: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
5a50: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
5a60: 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f  ned(SQLITE_BYTEO
5a70: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
5a80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5a90: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
5aa0: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5ab0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5ad0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5ae0: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5af0: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5b10: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5b20: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5b30: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
5b40: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5b50: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
5b60: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
5b70: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
5b80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
5b90: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
5ba0: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
5bb0: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
5bc0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
5bd0: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
5be0: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
5bf0: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
5c00: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
5c10: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
5c20: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
5c30: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
5c40: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
5c50: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
5c60: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
5c70: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
5c80: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
5c90: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
5ca0: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
5cb0: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
5cc0: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
5cd0: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
5ce0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
5cf0: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
5d00: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
5d10: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
5d20: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5d30: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
5d40: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
5d50: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
5d60: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
5d70: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
5d80: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
5d90: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
5da0: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
5db0: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
5dc0: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
5dd0: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
5de0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5df0: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
5e00: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
5e10: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
5e20: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
5e30: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
5e40: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
5e50: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
5e60: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
5e70: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
5e80: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
5e90: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
5ea0: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
5eb0: 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  on might return 
5ec0: 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  us 4-byte aligne
5ed0: 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20  d.** pointers.  
5ee0: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e  In that case, on
5ef0: 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65  ly verify 4-byte
5f00: 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23   alignment..*/.#
5f10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42  ifdef SQLITE_4_B
5f20: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5f30: 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  OC.# define EIGH
5f40: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5f50: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
5f60: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
5f70: 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  3)==0).#else.# d
5f80: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5f90: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5fa0: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5fb0: 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29  (char*)0)&7)==0)
5fc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5fd0: 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70  isable MMAP on p
5fe0: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69  latforms where i
5ff0: 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f  t is known to no
6000: 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65  t work.*/.#if de
6010: 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f  fined(__OpenBSD_
6020: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
6030: 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65  QNXNTO__).# unde
6040: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
6050: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
6060: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6070: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SIZE 0.#endif../
6080: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78  *.** Default max
6090: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d  imum size of mem
60a0: 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f  ory used by memo
60b0: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e  ry-mapped I/O in
60c0: 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64   the VFS.*/.#ifd
60d0: 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69  ef __APPLE__.# i
60e0: 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f  nclude <TargetCo
60f0: 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20  nditionals.h>.# 
6100: 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48  if TARGET_OS_IPH
6110: 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51  ONE.#   undef SQ
6120: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6130: 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  ZE.#   define SQ
6140: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6150: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
6160: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
6170: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6180: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6190: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
61a0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
61b0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
61c0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
61d0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
61e0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
61f0: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
6200: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
6210: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
6220: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
6230: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6240: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6250: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
6260: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
6270: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
6280: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6290: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
62a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
62b0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
62c0: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
62d0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
62e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
62f0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6300: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
6310: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
6320: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
6330: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
6340: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
6350: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
6360: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
6370: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
6380: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
6390: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
63a0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
63b0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
63c0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
63d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
63e0: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
63f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6400: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
6410: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
6420: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
6430: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
6440: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
6450: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6460: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
6470: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6480: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
6490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
64a0: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
64b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
64c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
64d0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
64e0: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
64f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6500: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
6510: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
6520: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
6530: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
6540: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
6550: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
6560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6570: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6580: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
6590: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
65a0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
65b0: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
65c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
65d0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
65e0: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
65f0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
6600: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6610: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6620: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6630: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6640: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
6650: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6660: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
6670: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
6680: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
6690: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
66a0: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
66b0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
66c0: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
66d0: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
66e0: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
66f0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
6700: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
6710: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
6720: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
6730: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
6740: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
6750: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
6760: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
6770: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6780: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
6790: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
67a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
67b0: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
67c0: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
67d0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
67e0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
67f0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
6800: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
6810: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
6820: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
6830: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
6840: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
6850: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
6860: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
6870: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
6880: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
6890: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
68a0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
68b0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
68c0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
68d0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
68e0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
68f0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
6900: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
6910: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
6920: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6930: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
6940: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6950: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
6960: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
6970: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
6980: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
6990: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
69a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
69b0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
69c0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
69d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
69e0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
69f0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
6a00: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
6a10: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
6a20: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
6a30: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
6a40: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6a50: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6a60: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6a70: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6a80: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6a90: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6aa0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6ab0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6ac0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6ad0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6ae0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6af0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
6b00: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
6b10: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
6b20: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6b30: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
6b40: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
6b50: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6b60: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6b70: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6b80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6b90: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6ba0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6bb0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6bc0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6bd0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6be0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6bf0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
6c00: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
6c10: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
6c20: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
6c30: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
6c40: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
6c50: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6c60: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6c70: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6c80: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6ca0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6cb0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6cc0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6cd0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6ce0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6cf0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
6d00: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
6d10: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
6d20: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
6d30: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
6d40: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
6d50: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6d60: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6d70: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6d80: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6d90: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6da0: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6db0: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6dc0: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6dd0: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6de0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6df0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
6e00: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
6e10: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
6e20: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
6e30: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
6e40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6e50: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6e60: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6e70: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6e80: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6e90: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6ea0: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6eb0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6ec0: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6ed0: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6ee0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6ef0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
6f00: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
6f10: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
6f20: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
6f30: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6f40: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6f50: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6f60: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6f70: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6f80: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6f90: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6fa0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6fb0: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6fc0: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6fd0: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6fe0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6ff0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7000: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7010: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7020: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7030: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7040: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7050: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7060: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7070: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7080: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7090: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
70a0: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
70b0: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
70c0: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
70d0: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
70e0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
70f0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7100: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7110: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7120: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7130: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7140: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7150: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7160: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7170: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7180: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7190: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
71a0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
71b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
71c0: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
71d0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
71e0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
71f0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7200: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7210: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7220: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7230: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7240: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7250: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7260: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7270: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7280: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7290: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
72a0: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
72b0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
72c0: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
72d0: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
72e0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
72f0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
7300: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
7310: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7320: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
7330: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
7340: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
7350: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
7360: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
7370: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
7380: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
7390: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
73a0: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
73b0: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
73c0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
73d0: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
73e0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
73f0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
7400: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
7410: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
7420: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
7430: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
7440: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
7450: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
7460: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
7470: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
7480: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
7490: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
74a0: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
74b0: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
74c0: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
74d0: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
74e0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
74f0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
7500: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
7510: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
7520: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
7530: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
7540: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
7550: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
7560: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
7570: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
7580: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
7590: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
75a0: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
75b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
75c0: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
75d0: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
75e0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
75f0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
7600: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
7610: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
7620: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
7630: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
7640: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
7650: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
7660: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
7670: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
7680: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
7690: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
76a0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
76b0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
76c0: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
76d0: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
76e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
76f0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
7700: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
7710: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
7720: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
7730: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
7740: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
7750: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
7760: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
7770: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
7780: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
7790: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
77a0: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
77b0: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
77c0: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
77d0: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
77e0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
77f0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
7800: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
7810: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
7820: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
7830: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
7840: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
7850: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
7860: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
7870: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
7880: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7890: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
78a0: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
78b0: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
78c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
78e0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
78f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7900: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
7910: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7920: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
7930: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
7940: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
7950: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7960: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
7970: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7980: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
7990: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
79a0: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
79b0: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
79c0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
79d0: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
79e0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
79f0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
7a00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
7a10: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
7a20: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
7a30: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
7a40: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
7a50: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7a60: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7a70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a80: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7a90: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7aa0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7ab0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7ac0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7ad0: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7ae0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7af0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
7b00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
7b10: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
7b20: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
7b30: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
7b40: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
7b50: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7b60: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7b70: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7b80: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7b90: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7ba0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7bb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7bc0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7bd0: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7be0: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7bf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
7c00: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
7c10: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
7c20: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
7c30: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c40: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
7c50: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c60: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7c70: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7c80: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7c90: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7ca0: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7cb0: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7cc0: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7cd0: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7ce0: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7cf0: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
7d00: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
7d10: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
7d20: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
7d30: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
7d40: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
7d50: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7d60: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7d70: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7d80: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7d90: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7da0: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7db0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7dc0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7dd0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7de0: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7df0: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
7e00: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
7e10: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
7e20: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
7e30: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
7e40: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
7e50: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7e60: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7e70: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7e80: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
7e90: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
7ea0: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
7eb0: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
7ec0: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
7ed0: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
7ee0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7ef0: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
7f00: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
7f10: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
7f20: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
7f30: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
7f40: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
7f50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
7f60: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
7f70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7f80: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
7f90: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
7fa0: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
7fb0: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
7fc0: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
7fd0: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
7fe0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
7ff0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
8000: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
8010: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
8020: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
8030: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
8040: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
8050: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
8060: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
8070: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
8080: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
8090: 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d   disk */.  Schem
80a0: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
80b0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
80c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
80d0: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
80e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
80f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
8100: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
8110: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
8120: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
8130: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
8140: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
8150: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
8160: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
8170: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
8180: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
8190: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
81a0: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
81b0: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
81c0: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
81d0: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
81e0: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
81f0: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
8200: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
8210: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
8220: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
8230: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
8240: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a  ed object..** .*
8250: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
8260: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
8270: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
8280: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
8290: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
82a0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
82b0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
82c0: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
82d0: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
82e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
82f0: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
8300: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
8310: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
8320: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
8330: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
8340: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
8350: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
8360: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
8370: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
8380: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
8390: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
83a0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
83b0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
83c0: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
83d0: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
83e0: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
83f0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
8400: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
8410: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
8420: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
8430: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
8440: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
8450: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
8460: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
8470: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
8480: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
8490: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
84a0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
84b0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
84c0: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
84d0: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
84e0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
84f0: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
8500: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
8510: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
8520: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8530: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
8540: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
8550: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
8560: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8570: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
8580: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
8590: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
85a0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
85b0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
85c0: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
85d0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
85e0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
85f0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
8600: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
8610: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
8620: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
8630: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
8640: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
8650: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8660: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
8670: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
8680: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
8690: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
86a0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
86b0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
86c0: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
86d0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
86e0: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
86f0: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
8700: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
8710: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
8720: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
8730: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
8740: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70   in the .** Db.p
8750: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
8760: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
8770: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
8780: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
8790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
87a0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
87b0: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
87c0: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
87d0: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
87e0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
87f0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
8800: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
8810: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
8820: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
8830: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
8840: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
8850: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
8860: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
8870: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8880: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
8890: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
88a0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
88b0: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
88c0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
88d0: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
88e0: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
88f0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
8900: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
8910: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
8920: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
8930: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
8940: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
8950: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
8960: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
8970: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
8980: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
8990: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
89a0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
89b0: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
89c0: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
89d0: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
89e0: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
89f0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
8a00: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
8a10: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
8a20: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
8a30: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
8a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
8a50: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
8a60: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
8a70: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
8a80: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
8a90: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
8aa0: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
8ab0: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
8ac0: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
8ad0: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
8ae0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
8af0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
8b00: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
8b10: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
8b20: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
8b30: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
8b40: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
8b50: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
8b60: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
8b70: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
8b80: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
8b90: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
8ba0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
8bb0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
8bc0: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
8bd0: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
8be0: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
8bf0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
8c00: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
8c10: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
8c20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8c30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8c40: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
8c50: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8c60: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
8c70: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
8c80: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
8c90: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
8ca0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
8cb0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
8cc0: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
8cd0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
8ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
8cf0: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
8d00: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
8d10: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
8d20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
8d30: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
8d40: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
8d50: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
8d60: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
8d70: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
8d80: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
8d90: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
8da0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
8db0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
8dc0: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
8dd0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
8de0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
8df0: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
8e00: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
8e10: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
8e20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8e30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8e40: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
8e50: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
8e60: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
8e70: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
8e80: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
8e90: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
8ea0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8eb0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
8ec0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
8ed0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8ee0: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
8ef0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8f00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8f10: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
8f20: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
8f30: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
8f40: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
8f50: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8f60: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
8f70: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
8f80: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
8f90: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
8fa0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
8fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8fc0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
8fd0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
8fe0: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
8ff0: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
9000: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
9010: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
9020: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
9030: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
9040: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
9050: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
9060: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
9070: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
9080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9090: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
90a0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
90b0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
90c0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
90d0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
90e0: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
90f0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
9100: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
9110: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
9120: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
9130: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
9140: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9150: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
9160: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
9170: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
9180: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
9190: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
91a0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
91b0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
91c0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
91e0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
91f0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
9200: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
9210: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
9220: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9230: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
9240: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
9250: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
9260: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
9270: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
9280: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
9290: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
92a0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
92b0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
92c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
92d0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
92e0: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
92f0: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
9300: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
9310: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
9320: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
9330: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
9340: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
9350: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
9360: 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
9370: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9380: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
9390: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
93a0: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
93b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
93c0: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
93d0: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
93e0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
93f0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
9400: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9410: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
9420: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
9430: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
9440: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
9450: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
9460: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
9470: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
9480: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
9490: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
94a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
94b0: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
94c0: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
94d0: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
94e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
94f0: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
9500: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
9510: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9530: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
9540: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
9550: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
9560: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
9570: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
9580: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
9590: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
95a0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
95b0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
95c0: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
95d0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
95e0: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
95f0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
9600: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
9610: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
9620: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
9630: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
9640: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
9650: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
9660: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
9670: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
9680: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
9690: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
96a0: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
96b0: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
96c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
96d0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
96e0: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
96f0: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
9700: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
9710: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
9720: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
9730: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
9740: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
9750: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
9760: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
9770: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
9780: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
9790: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
97a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
97b0: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
97c0: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
97d0: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
97e0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
97f0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
9800: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
9810: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
9820: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9830: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9840: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9860: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9890: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
98a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
98b0: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
98c0: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
98d0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
98e0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
98f0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
9920: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  *);.#endif.../*.
9930: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
9940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
9950: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9960: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9970: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
9980: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
9990: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
99a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
99b0: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
99c0: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
99d0: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
99e0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
99f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
9a00: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
9a10: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
9a20: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
9a30: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
9a40: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
9a50: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
9a60: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
9a70: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9a80: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
9a90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9ab0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
9ac0: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ae0: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
9af0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
9b00: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
9b10: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9b20: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
9b30: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
9b40: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
9b50: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
9b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
9b70: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
9b80: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
9b90: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
9ba0: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
9bb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
9bc0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
9bd0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
9be0: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
9bf0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
9c00: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
9c10: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
9c20: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
9c30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c40: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
9c50: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
9c60: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
9c70: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
9c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
9c90: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
9ca0: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
9cb0: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
9cc0: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
9cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
9ce0: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
9cf0: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
9d00: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
9d30: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
9d40: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
9d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9d60: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9d70: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9d80: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9d90: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9da0: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9db0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9dc0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
9de0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
9df0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
9e00: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
9e10: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
9e20: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
9e30: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
9e40: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
9e50: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9e60: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9e70: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9e80: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9e90: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9ea0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9ec0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9ed0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
9ee0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
9ef0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
9f00: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
9f10: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
9f20: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
9f30: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
9f40: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
9f50: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9f60: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9f70: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9f80: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9f90: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9fa0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9fb0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9fc0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9fd0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9fe0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
9ff0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
a000: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
a010: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
a020: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a030: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
a040: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
a050: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a060: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a080: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
a090: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
a0a0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a0b0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
a0c0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
a0d0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
a0e0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
a0f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
a100: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
a110: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
a120: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
a130: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
a140: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
a150: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
a160: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
a170: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
a180: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
a190: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
a1a0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
a1b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
a1c0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
a1f0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
a200: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
a210: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
a220: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
a230: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
a240: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
a250: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
a260: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
a270: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
a280: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
a290: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
a2a0: 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65  u8 imposterTable
a2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
a2c0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
a2d0: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d  ter table */.  }
a2e0: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
a2f0: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
a300: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a310: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
a320: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
a330: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a350: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a360: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a370: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
a380: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a3a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a3b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a3c0: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
a3d0: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
a400: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
a410: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
a420: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
a430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a440: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
a450: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
a460: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
a470: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
a480: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a490: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
a4a0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
a4b0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
a4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a4d0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
a4e0: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
a4f0: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
a500: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
a510: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
a520: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
a530: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
a540: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a560: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
a570: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
a580: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
a590: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
a5a0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
a5b0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
a5c0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a5d0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a600: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
a610: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a620: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
a630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a640: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
a650: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
a660: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
a670: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
a680: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
a690: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a6a0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
a6b0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
a6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a6d0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
a6e0: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
a6f0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
a700: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
a710: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
a720: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a730: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
a740: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
a750: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
a760: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
a770: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
a780: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
a790: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
a7a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
a7b0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
a7c0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
a7d0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
a7e0: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
a7f0: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
a800: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
a810: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
a820: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
a830: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
a840: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
a850: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
a860: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a870: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
a880: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
a890: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
a8a0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
a8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
a8c0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
a8d0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
a8e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
a8f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
a900: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
a910: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
a920: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
a930: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
a940: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
a950: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
a960: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
a970: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
a980: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
a990: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
a9a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
a9b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a9c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
a9d0: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
a9e0: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
a9f0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
aa00: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
aa10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
aa20: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
aa30: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
aa40: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
aa50: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
aa60: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
aa70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
aa80: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
aa90: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
aaa0: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
aab0: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
aac0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
aad0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
aae0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
aaf0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
ab00: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ab10: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
ab20: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
ab30: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ab40: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
ab50: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
ab60: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
ab70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
ab80: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
ab90: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
aba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
abb0: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
abc0: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
abd0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
abe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
abf0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
ac00: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
ac10: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
ac20: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
ac30: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
ac40: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
ac50: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
ac60: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
ac70: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
ac80: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
ac90: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
aca0: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
acb0: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
acc0: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
acd0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
ace0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
acf0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
ad00: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
ad10: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
ad20: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
ad30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
ad40: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
ad50: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
ad60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
ad70: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ad80: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
ad90: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
ada0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
adb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
adc0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
add0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
ade0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
adf0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
ae00: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
ae10: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
ae20: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
ae30: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
ae40: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
ae50: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
ae60: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
ae70: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
ae80: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
ae90: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
aec0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
aed0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
aee0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af00: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
af10: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
af20: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
af30: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
af40: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
af50: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
af60: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
af70: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
af80: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
af90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
afa0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
afb0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
afc0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
afd0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
afe0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
aff0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
b000: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
b010: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
b020: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
b030: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
b040: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
b050: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
b060: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
b070: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
b080: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
b090: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
b0a0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
b0b0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
b0c0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
b0d0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
b0e0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b0f0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
b100: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
b110: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
b120: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
b130: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b140: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
b150: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
b160: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
b170: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
b180: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
b190: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
b1a0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
b1b0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
b1c0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
b1d0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
b1e0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
b1f0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
b200: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
b210: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
b220: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
b230: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
b240: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
b250: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
b260: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
b270: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
b280: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b2a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
b2b0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
b2c0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
b2d0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
b2e0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
b2f0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
b300: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
b310: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
b320: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
b330: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
b340: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
b350: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
b360: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b370: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
b380: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
b390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
b3a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
b3b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
b3c0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
b3d0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
b3e0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
b3f0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
b400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
b410: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
b420: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
b430: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
b440: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
b450: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
b460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
b470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
b480: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
b490: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
b4a0: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
b4b0: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
b4c0: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
b4d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b4e0: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
b4f0: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
b500: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
b510: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
b520: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b530: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
b540: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
b550: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
b560: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
b570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b580: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
b590: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
b5a0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
b5b0: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
b5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5d0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
b5e0: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f  0x00000010  /* O
b5f0: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
b600: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
b610: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
b620: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
b630: 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  20  /* Show full
b640: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
b650: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
b660: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
b670: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
b680: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
b690: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
b6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6b0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
b6c0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
b6d0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
b6e0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
b6f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b720: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
b730: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
b740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b760: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
b770: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
b780: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
b790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
b7a0: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
b7b0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
b7c0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
b7d0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
b810: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
b820: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
b830: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
b840: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
b850: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
b860: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
b870: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b880: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
b890: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
b8a0: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
b8b0: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
b8c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b8d0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
b8e0: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
b8f0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
b900: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
b910: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b920: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
b930: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
b940: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
b950: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
b960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
b970: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
b980: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
b990: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
b9a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
b9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b9c0: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
b9d0: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
b9e0: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
b9f0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ba00: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
ba10: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
ba20: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
ba30: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
ba40: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
ba50: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
ba60: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
ba70: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
ba80: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
ba90: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
baa0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
bab0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
bac0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
bad0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bae0: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
baf0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
bb00: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
bb10: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
bb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
bb30: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
bb40: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
bb50: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
bb60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
bb70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bb80: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
bb90: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
bba0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
bbb0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
bbc0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
bbd0: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
bbe0: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
bbf0: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
bc00: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
bc10: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
bc20: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
bc30: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
bc40: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
bc50: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
bc60: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
bc70: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
bc80: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
bc90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bca0: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
bcb0: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
bcc0: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
bcd0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
bce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
bcf0: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
bd00: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
bd10: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
bd20: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bd30: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
bd40: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
bd50: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
bd60: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
bd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61  define SQLITE_Va
bd80: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
bd90: 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72  8000000  /* Curr
bda0: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
bdb0: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  M */.#define SQL
bdc0: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
bdd0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
bde0: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
bdf0: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
be00: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
be10: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
be20: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
be30: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
be40: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
be50: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
be60: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
be70: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
be80: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
be90: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
bea0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
beb0: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
bec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
bed0: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
bee0: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
bef0: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
bf00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
bf10: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
bf20: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
bf30: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
bf40: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
bf50: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
bf60: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
bf70: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
bf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
bf90: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
bfa0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
bfb0: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
bfd0: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
bfe0: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
bff0: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
c000: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c010: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
c020: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
c030: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
c040: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
c050: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
c060: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
c070: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
c080: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
c090: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
c0a0: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
c0b0: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
c0c0: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
c0d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0e0: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
c0f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
c100: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
c110: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
c120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c130: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
c140: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
c150: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
c160: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c170: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
c180: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
c190: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
c1a0: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
c1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
c1c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
c1d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
c1e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
c1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c200: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
c210: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
c220: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
c230: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
c240: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
c250: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
c260: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
c270: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
c280: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
c290: 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
c2a0: 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70  _TEST.#define Op
c2b0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
c2c0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
c2d0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
c2e0: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
c2f0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c300: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
c310: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
c320: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
c330: 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  =0).#else.#defin
c340: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
c350: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
c360: 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69    0.#define Opti
c370: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
c380: 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65  db, mask)   1.#e
c390: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
c3a0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
c3b0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
c3c0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
c3d0: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
c3e0: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
c3f0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
c400: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
c410: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
c420: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
c430: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
c440: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
c450: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
c460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
c470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
c480: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
c490: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
c4a0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
c4b0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
c4c0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
c4d0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
c4e0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
c4f0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
c500: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c510: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
c520: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
c530: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
c560: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
c570: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
c580: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c590: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
c5a0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
c5b0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
c5c0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
c5d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c5e0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
c5f0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
c600: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
c610: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
c620: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
c630: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
c640: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
c650: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
c660: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
c670: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
c680: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
c690: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
c6a0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
c6b0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
c6c0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
c6d0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
c6e0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c6f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
c700: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
c710: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
c720: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
c730: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
c740: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
c750: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
c760: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
c770: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
c780: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
c790: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
c7a0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
c7b0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
c7c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
c7d0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
c7e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c7f0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
c800: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
c810: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
c820: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
c830: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
c840: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
c850: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
c860: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
c870: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
c880: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
c890: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
c8a0: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
c8b0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
c8c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
c8d0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
c8e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
c8f0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
c900: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
c910: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
c920: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c930: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
c940: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
c950: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
c960: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
c970: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c980: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
c990: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
c9a0: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
c9b0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
c9c0: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
c9d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c9e0: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
c9f0: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
ca00: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
ca10: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
ca20: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
ca30: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ca40: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ca50: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
ca60: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ca70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
ca80: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
ca90: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
caa0: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
cab0: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
cac0: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
cad0: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
cae0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
caf0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
cb00: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
cb10: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
cb20: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
cb30: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
cb40: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
cb50: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
cb60: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
cb70: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
cb80: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
cb90: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
cba0: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
cbb0: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
cbc0: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
cbd0: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
cbe0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
cbf0: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
cc00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
cc10: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
cc20: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
cc30: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
cc40: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
cc50: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
cc60: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
cc70: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
cc80: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
cc90: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
cca0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
ccb0: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
ccc0: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
ccd0: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
cce0: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
ccf0: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
cd00: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
cd10: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
cd20: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
cd30: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
cd40: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
cd50: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
cd60: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
cd70: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
cd80: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
cd90: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
cda0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
cdb0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
cdc0: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
cdd0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
cde0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
cdf0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
ce00: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
ce10: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
ce20: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
ce30: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
ce40: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
ce50: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
ce60: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
ce70: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
ce80: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
ce90: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
cea0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
ceb0: 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51  ASK  0x003 /* SQ
cec0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
ced0: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
cee0: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
cef0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
cf00: 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61       0x004 /* Ca
cf10: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
cf20: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
cf30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
cf40: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
cf50: 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d    0x008 /* Case-
cf60: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
cf70: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
cf80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cf90: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
cfa0: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
cfb0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
cfc0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
cfd0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
cfe0: 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69  LL 0x020 /* sqli
cff0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
d000: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
d010: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  led */.#define S
d020: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
d030: 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69  H   0x040 /* Bui
d040: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
d050: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
d060: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
d070: 59 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a  YPEOF   0x080 /*
d080: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
d090: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
d0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d0b0: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30  NC_COUNT    0x10
d0c0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
d0d0: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
d0e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0f0: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
d100: 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x200 /* Built-
d110: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
d120: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
d130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d140: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20  _UNLIKELY 0x400 
d150: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69  /* Built-in unli
d160: 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  kely() function 
d170: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d180: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
d190: 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  0x800 /* Constan
d1a0: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
d1b0: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
d1c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d1d0: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30  E_FUNC_MINMAX  0
d1e0: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
d1f0: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
d200: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
d210: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
d220: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
d230: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
d240: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
d250: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
d260: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
d270: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
d280: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
d290: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
d2a0: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
d2b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d2c0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
d2d0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
d2e0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
d2f0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
d300: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
d310: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
d320: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
d330: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
d340: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
d350: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
d360: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
d370: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
d380: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
d390: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
d3a0: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
d3b0: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
d3c0: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
d3d0: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
d3e0: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
d3f0: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
d400: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
d410: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
d420: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
d430: 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
d440: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d450: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
d460: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
d470: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
d480: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
d490: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
d4a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
d4b0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
d4c0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
d4d0: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
d4e0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
d4f0: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
d500: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
d510: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
d520: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
d530: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
d540: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
d550: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
d560: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
d570: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
d580: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
d590: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
d5a0: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
d5b0: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
d5c0: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
d5d0: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
d5e0: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
d5f0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d600: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d610: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d620: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d630: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
d640: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d650: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
d660: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
d670: 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74   C .**     funct
d680: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
d690: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
d6a0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
d6b0: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
d6c0: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
d6d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
d6e0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
d6f0: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
d700: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
d710: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
d720: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
d730: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
d740: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
d750: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
d760: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
d770: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d780: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
d790: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
d7a0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
d7b0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d7c0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d7d0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
d7e0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
d7f0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
d800: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
d810: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
d820: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
d830: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
d840: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d850: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d860: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d870: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
d880: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
d890: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
d8a0: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
d8b0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
d8c0: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
d8d0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
d8e0: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
d8f0: 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
d900: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
d910: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d920: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d930: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
d940: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d950: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d960: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d970: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d980: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
d990: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
d9a0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
d9b0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d9c0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d9d0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d9e0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d9f0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
da00: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
da10: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
da20: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
da30: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
da40: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
da50: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
da60: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
da70: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
da80: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
da90: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
daa0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dab0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
dac0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dad0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dae0: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
daf0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
db00: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
db10: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
db20: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
db30: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
db40: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
db50: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
db60: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
db70: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
db80: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
db90: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
dba0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
dbb0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
dbc0: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
dbd0: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
dbe0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
dbf0: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
dc00: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
dc10: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
dc20: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
dc30: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
dc40: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
dc50: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
dc60: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
dc70: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
dc80: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
dc90: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
dca0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
dcb0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
dcc0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
dcd0: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
dce0: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
dcf0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
dd00: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
dd10: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
dd20: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
dd40: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
dd50: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
dd60: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
dd70: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
dd80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
dd90: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
dda0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
ddb0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
ddc0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
ddd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
dde0: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
ddf0: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
de00: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
de10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
de20: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
de30: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
de40: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
de50: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
de60: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
de70: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
de80: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
de90: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
dea0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
deb0: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
dec0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
ded0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
dee0: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
def0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
df00: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
df10: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
df20: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
df30: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
df40: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
df50: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
df60: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
df70: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
df80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
df90: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
dfa0: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
dfb0: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
dfc0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
dfd0: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
dfe0: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
dff0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
e000: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
e010: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
e020: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
e030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e040: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
e050: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e060: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
e090: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e0a0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e0b0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e0c0: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
e0d0: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
e0e0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
e0f0: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
e100: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
e110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
e120: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
e130: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
e140: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e150: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e160: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e170: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e180: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e190: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e1a0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e1b0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e1c0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e1d0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e1e0: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e1f0: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e200: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e210: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e220: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e230: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e240: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e250: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e260: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e270: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e280: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e290: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e2a0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e2b0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e2c0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e2d0: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e2e0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e2f0: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e300: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e310: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e320: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e330: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e340: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e350: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e360: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e370: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
e380: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
e390: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e3a0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e3b0: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e3c0: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e3d0: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e3e0: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e3f0: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e400: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e410: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e420: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e430: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e440: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e450: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e460: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e470: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e480: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e490: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e4a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
e4b0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
e4c0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e4d0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e4e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e4f0: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
e500: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
e510: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
e520: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
e530: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
e540: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
e550: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
e560: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
e570: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
e580: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
e590: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
e5a0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
e5b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
e5c0: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
e5d0: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
e5e0: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
e5f0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
e600: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
e610: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
e620: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
e630: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e640: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
e650: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
e660: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
e670: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
e680: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
e690: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
e6a0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
e6b0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
e6c0: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
e6d0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
e6e0: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
e6f0: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
e700: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
e710: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
e720: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
e730: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
e740: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
e750: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
e760: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
e770: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
e780: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
e790: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e7a0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
e7b0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
e7c0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
e7d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
e7e0: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
e7f0: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
e800: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
e810: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
e820: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
e830: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
e840: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
e850: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
e860: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
e870: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
e880: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
e890: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
e8a0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
e8b0: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
e8c0: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
e8d0: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
e8e0: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
e8f0: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
e900: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
e910: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
e920: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
e930: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
e940: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
e950: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
e960: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
e970: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
e980: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
e990: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
e9a0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
e9b0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
e9c0: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
e9d0: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
e9e0: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
e9f0: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ea00: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ea10: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
ea20: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
ea30: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
ea40: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
ea50: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
ea60: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
ea70: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
ea80: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
ea90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaa0: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
eab0: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
eac0: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
ead0: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
eae0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
eaf0: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
eb00: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
eb10: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
eb20: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
eb30: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
eb40: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
eb50: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
eb60: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
eb70: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
eb80: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
eb90: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
eba0: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
ebb0: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
ebc0: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
ebd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ebe0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
ebf0: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
ec00: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
ec10: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
ec20: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
ec30: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
ec40: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
ec50: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
ec60: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
ec70: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
ec80: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
ec90: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
eca0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
ecb0: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
ecc0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
ecd0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
ece0: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
ecf0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
ed00: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
ed10: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
ed20: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
ed30: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
ed40: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
ed50: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
ed60: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ed70: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
ed80: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
ed90: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
eda0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
edb0: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
edc0: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
edd0: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
ede0: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
edf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
ee00: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
ee10: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
ee20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee30: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
ee40: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
ee50: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
ee60: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
ee70: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
ee80: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
ee90: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
eea0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
eeb0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
eec0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
eed0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
eee0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
eef0: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
ef00: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
ef10: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
ef20: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
ef30: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ef40: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
ef50: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
ef60: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
ef70: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
ef80: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
ef90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
efa0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
efb0: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
efc0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
efd0: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
efe0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
eff0: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f000: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f010: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f020: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f030: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f040: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f050: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f060: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f070: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f080: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f090: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f0a0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f0b0: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f0c0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f0d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f0e0: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f0f0: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f100: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f110: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f120: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f130: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f140: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f150: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f160: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f170: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f180: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f190: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f1a0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f1b0: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f1c0: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f1d0: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f1e0: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f1f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f200: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f210: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f220: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f230: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f240: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f250: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f260: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f270: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f280: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f290: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f2a0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f2b0: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f2c0: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f2d0: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f2e0: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f2f0: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f300: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f310: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f320: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f330: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f340: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f350: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f360: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f370: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f380: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f390: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f3a0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f3b0: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f3c0: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f3d0: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f3e0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f3f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f400: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f410: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f420: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f430: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f440: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f450: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f460: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f470: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f480: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f490: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f4a0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
f4b0: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
f4c0: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
f4d0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
f4e0: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
f4f0: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
f500: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f510: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
f520: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
f530: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
f540: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
f550: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
f560: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
f570: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
f580: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
f590: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
f5a0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
f5b0: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
f5c0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
f5d0: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
f5e0: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
f5f0: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
f600: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
f610: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
f620: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
f630: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
f640: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
f650: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
f660: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
f670: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
f680: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
f690: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
f6a0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
f6b0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
f6c0: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
f6d0: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
f6e0: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
f6f0: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
f700: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
f710: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
f720: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
f730: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
f740: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
f750: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
f760: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
f770: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
f780: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
f790: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
f7a0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
f7b0: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
f7c0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
f7d0: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
f7e0: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
f7f0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
f800: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
f810: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
f820: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f830: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
f840: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
f850: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
f860: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
f870: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
f880: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
f890: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
f8a0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
f8b0: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
f8c0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
f8d0: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
f8e0: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f900: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
f910: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
f920: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
f930: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
f940: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
f950: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
f960: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
f970: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
f980: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
f990: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
f9a0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
f9b0: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
f9c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
f9d0: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
f9e0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
f9f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
fa00: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
fa10: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
fa20: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
fa30: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
fa40: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
fa50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
fa60: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
fa70: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
fa80: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
fa90: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
faa0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
fab0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
fac0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
fad0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
fae0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
faf0: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
fb00: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
fb10: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
fb20: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
fb30: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
fb40: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
fb50: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
fb60: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
fb70: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
fb80: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
fb90: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
fba0: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
fbb0: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
fbc0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
fbd0: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
fbe0: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
fbf0: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
fc00: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
fc10: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
fc20: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
fc30: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
fc60: 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
fc70: 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
fc80: 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
fc90: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
fca0: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
fcb0: 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
fcc0: 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ble */.  i16 iPK
fcd0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
fce0: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
fcf0: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
fd00: 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a  ] as the rowid *
fd10: 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
fd20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
fd30: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
fd40: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
fd50: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
fd60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fd70: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
fd80: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c  his Table */.  L
fd90: 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
fda0: 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
fdb0: 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
fdc0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
fdd0: 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
fde0: 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
fdf0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
fe00: 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
fe10: 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
fe20: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
fe30: 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
fe40: 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
fe50: 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
fe60: 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
fe70: 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
fe80: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
fe90: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
fea0: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
feb0: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
fec0: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
fed0: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
fee0: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
fef0: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
ff00: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
ff10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
ff20: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
ff30: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
ff40: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
ff50: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
ff60: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
ff70: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
ff80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ff90: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
ffa0: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
ffb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ffc0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
ffd0: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
ffe0: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
fff0: 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
10000 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
10010 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
10020 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
10030 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
10040 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
10050 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
10060 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
10070 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
10080 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
10090 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
100a0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
100b0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
100c0 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
100d0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
100e0 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
100f0 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
10100 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
10110 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
10120 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
10130 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
10140 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
10150 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
10160 70 70 6c 69 65 73 20 74 6f 20 76 69 72 74 75 61  pplies to virtua
10170 6c 20 74 61 62 6c 65 73 20 74 68 61 74 20 68 61  l tables that ha
10180 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
10190 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
101a0 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
101b0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
101c0 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
101d0 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
101e0 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
101f0 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
10200 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
10210 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10220 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
10230 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
10240 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
10250 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
10260 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
10270 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
10280 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
10290 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
102a0 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
102b0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
102c0 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
102d0 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
102e0 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
102f0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
10300 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
10310 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
10320 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
10330 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
10340 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
10350 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
10360 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
10370 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
10380 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
10390 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
103a0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
103b0 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
103c0 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
103d0 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
103e0 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
103f0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10400 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
10410 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
10420 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41  No rowid.  PRIMA
10430 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
10440 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
10450 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20  NoVisibleRowid  
10460 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0x40    /* No us
10470 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
10480 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
10490 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
104a0 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20  n       0x80    
104b0 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
104c0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
104d0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  /.../*.** Test t
104e0 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
104f0 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
10500 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
10510 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
10520 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
10530 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
10540 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
10550 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
10560 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
10570 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
10580 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
10590 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
105a0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
105b0 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
105c0 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  )      (((X)->ta
105d0 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74  bFlags & TF_Virt
105e0 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69  ual)!=0).#  defi
105f0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
10600 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
10610 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
10620 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65  IDDEN)!=0).#else
10630 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
10640 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
10650 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
10660 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
10670 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  dif../* Does the
10680 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
10690 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
106a0 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
106b0 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
106c0 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
106d0 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
106e0 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
106f0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
10700 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
10710 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
10720 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
10730 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
10740 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10750 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
10760 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
10770 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
10780 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
10790 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
107a0 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
107b0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
107c0 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
107d0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
107e0 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
107f0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
10800 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
10810 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
10820 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
10830 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10840 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
10850 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
10860 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
10870 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
10880 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
10890 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
108a0 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
108b0 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
108c0 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
108d0 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
108e0 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
108f0 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
10900 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
10910 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10920 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
10930 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
10940 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
10950 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
10960 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
10970 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
10980 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
10990 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
109a0 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
109b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
109c0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
109d0 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
109e0 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
109f0 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
10a00 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
10a10 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
10a20 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10a30 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
10a40 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
10a50 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
10a60 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
10a70 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
10a80 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
10a90 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
10aa0 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
10ab0 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
10ac0 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
10ad0 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
10ae0 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
10af0 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
10b00 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
10b10 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
10b20 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
10b30 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
10b40 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
10b50 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
10b60 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
10b70 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
10b80 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
10b90 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
10ba0 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
10bb0 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
10bc0 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
10bd0 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
10be0 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
10bf0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
10c00 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
10c10 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
10c20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
10c30 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
10c40 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
10c50 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
10c60 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
10c70 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
10c80 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
10c90 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
10ca0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
10cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10cc0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10cd0 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
10ce0 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
10cf0 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
10d00 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
10d10 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
10d20 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
10d30 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
10d40 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
10d50 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
10d60 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
10d70 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
10d80 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
10d90 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
10da0 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
10db0 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
10dc0 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
10dd0 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
10de0 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
10df0 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
10e00 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
10e10 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
10e20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
10e30 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
10e40 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
10e50 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
10e60 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
10e70 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
10e80 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
10e90 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
10ea0 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
10eb0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
10ec0 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
10ed0 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
10ee0 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
10ef0 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
10f00 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
10f10 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
10f20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
10f30 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
10f40 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
10f50 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
10f60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
10f70 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
10f80 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
10f90 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
10fa0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
10fb0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
10fc0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
10fd0 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
10fe0 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
10ff0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
11000 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
11010 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
11020 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
11030 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
11040 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
11050 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
11060 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
11070 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
11080 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
11090 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
110a0 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
110b0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
110c0 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
110d0 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
110e0 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
110f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
11100 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
11110 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
11120 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
11130 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
11140 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
11150 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
11160 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
11170 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
11180 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
11190 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
111a0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
111b0 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
111c0 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
111d0 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
111e0 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
111f0 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
11200 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
11210 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
11220 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
11230 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
11240 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
11250 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
11260 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
11270 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
11280 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
11290 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
112a0 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
112b0 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
112c0 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
112d0 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
112e0 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
112f0 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
11300 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
11310 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
11320 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
11330 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
11340 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
11350 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
11360 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
11370 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
11380 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
11390 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
113a0 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
113b0 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
113c0 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
113d0 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
113e0 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
113f0 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
11400 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
11410 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
11420 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
11430 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
11440 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
11450 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
11460 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
11470 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
11480 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
11490 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
114a0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
114b0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
114c0 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
114d0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
114e0 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
114f0 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
11500 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
11510 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
11520 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
11530 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
11540 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
11550 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
11560 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
11570 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
11580 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
11590 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
115a0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
115b0 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
115c0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
115d0 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
115e0 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
115f0 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
11600 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
11610 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
11620 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
11630 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
11640 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
11650 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
11660 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
11670 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
11680 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
11690 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
116a0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
116b0 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
116c0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
116d0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
116e0 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
116f0 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
11700 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
11710 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
11720 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
11730 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
11740 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
11750 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
11760 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
11770 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11780 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
11790 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
117a0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
117b0 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
117c0 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
117d0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
117e0 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
117f0 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
11800 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
11810 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
11820 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
11830 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
11840 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
11850 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
11860 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
11870 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
11880 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
11890 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
118a0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
118b0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
118c0 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
118d0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
118e0 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
118f0 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
11900 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
11910 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
11920 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
11930 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
11940 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
11950 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
11960 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
11970 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
11980 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
11990 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
119a0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
119b0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
119c0 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
119d0 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
119e0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
119f0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
11a00 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
11a10 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11a20 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
11a30 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
11a40 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
11a50 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
11a60 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11a70 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
11a80 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
11a90 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
11aa0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11ab0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11ac0 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
11ad0 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
11ae0 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
11af0 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
11b00 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
11b10 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
11b20 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
11b30 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
11b40 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
11b50 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
11b60 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
11b70 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
11b80 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
11b90 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
11ba0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
11bb0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
11bc0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
11bd0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
11be0 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
11bf0 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
11c00 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
11c10 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
11c20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
11c30 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
11c40 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
11c50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
11c60 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
11c70 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
11c80 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
11c90 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
11ca0 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
11cb0 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  ent fields..**.*
11cc0 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
11cd0 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
11ce0 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62   are only used b
11cf0 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20  y the optimized 
11d00 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75  comparison.** fu
11d10 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f  nctions vdbeReco
11d20 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61  rdCompareInt() a
11d30 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  nd vdbeRecordCom
11d40 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f  pareString()..*/
11d50 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
11d60 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
11d70 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
11d80 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
11d90 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
11da0 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
11db0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
11dc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
11dd0 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
11de0 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
11df0 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
11e00 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
11e10 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
11e20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
11e30 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
11e40 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
11e50 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
11e60 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
11e70 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
11e80 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
11e90 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20  es */.  int r1; 
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
11eb0 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
11ec0 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
11ed0 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20  .  int r2;      
11ee0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
11ef0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68  to return if (rh
11f00 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a  s < lhs) */.};..
11f10 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
11f20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
11f30 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
11f40 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
11f50 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11f60 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
11f70 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
11f80 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
11f90 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
11fa0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
11fb0 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
11fc0 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
11fd0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
11fe0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
11ff0 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
12000 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
12010 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
12020 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
12030 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
12040 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
12050 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
12060 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
12070 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
12080 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
12090 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
120a0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
120b0 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
120c0 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
120d0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
120e0 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
120f0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
12100 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
12110 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
12120 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
12130 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
12140 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
12150 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
12160 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
12170 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
12180 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
12190 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
121a0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
121b0 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
121c0 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
121d0 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
121e0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
121f0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12200 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
12210 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
12220 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
12230 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
12240 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
12250 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12260 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
12270 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
12280 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
12290 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
122a0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
122b0 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
122c0 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
122d0 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
122e0 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
122f0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
12300 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
12310 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
12320 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
12330 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
12340 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
12350 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
12360 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
12370 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
12380 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
12390 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
123a0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
123b0 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
123c0 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
123d0 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
123e0 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
123f0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
12400 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
12410 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
12420 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
12430 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
12440 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
12450 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
12460 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
12470 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
12480 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
12490 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
124a0 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
124b0 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
124c0 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
124d0 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
124e0 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
124f0 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
12500 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
12510 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
12520 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
12530 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
12540 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
12550 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
12560 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
12570 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
12580 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
12590 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
125a0 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
125b0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
125c0 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
125d0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
125e0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
125f0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
12600 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
12610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
12620 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
12630 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
12640 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
12650 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
12660 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
12670 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
12680 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
12690 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
126a0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
126b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
126c0 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
126d0 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
126e0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
126f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
12700 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
12710 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
12720 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
12730 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
12740 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
12750 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
12760 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
12770 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
12780 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
12790 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
127a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
127b0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
127c0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
127d0 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
127e0 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
127f0 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
12800 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
12810 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
12820 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
12830 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
12840 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
12850 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
12860 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
12870 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
12880 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
12890 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
128a0 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
128b0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
128c0 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
128f0 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12900 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
12910 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
12920 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
12930 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
12940 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
12950 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
12960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12970 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12980 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12990 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
129a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
129b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
129c0 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
129d0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
129e0 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
129f0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12a00 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
12a10 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
12a20 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
12a30 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
12a40 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
12a50 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
12a60 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12a70 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12a80 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12a90 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12aa0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12ab0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12ac0 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12ad0 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12ae0 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12af0 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12b00 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
12b10 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
12b20 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
12b30 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
12b40 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
12b50 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
12b60 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12b70 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12b80 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12b90 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
12ba0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
12bb0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
12bc0 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12bd0 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12be0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12bf0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12c00 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12c10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12c20 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
12c30 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
12c40 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
12c50 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
12c60 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12c70 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12c80 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12c90 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12ca0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12cb0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12cc0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12cd0 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12ce0 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12cf0 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12d00 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12d10 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12d20 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
12d30 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12d40 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
12d50 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12d60 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12d70 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
12d80 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
12d90 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12da0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
12db0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
12dc0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12dd0 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
12de0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12df0 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
12e00 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
12e10 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
12e20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
12e30 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
12e40 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
12e50 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
12e60 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
12e70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
12e80 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12e90 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
12ea0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
12eb0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
12ec0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
12ed0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12ee0 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
12ef0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12f00 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
12f10 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
12f20 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
12f30 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
12f40 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
12f50 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
12f60 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
12f70 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
12f80 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
12f90 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
12fa0 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  None)../*.** Eac
12fb0 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
12fc0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
12fd0 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
12fe0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12ff0 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
13000 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
13010 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
13020 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
13030 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
13040 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
13050 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
13060 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
13070 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
13080 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
13090 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
130a0 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
130b0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
130c0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
130d0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
130e0 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
130f0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
13100 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13110 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
13120 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
13130 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13140 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
13150 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13160 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
13170 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
13180 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
13190 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
131a0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
131b0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
131c0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
131d0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
131e0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
131f0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
13200 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
13210 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
13220 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
13230 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
13240 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
13250 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
13260 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
13270 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
13280 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
13290 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
132a0 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
132b0 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
132c0 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
132d0 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
132e0 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
132f0 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
13300 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
13310 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
13320 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13330 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
13340 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
13350 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
13360 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
13370 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
13380 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
13390 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
133a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
133b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
133c0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
133d0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
133e0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
133f0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
13400 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
13410 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
13420 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
13430 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
13440 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
13450 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
13460 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
13470 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
13480 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
13490 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
134a0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
134b0 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
134c0 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
134d0 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
134e0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
134f0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13500 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
13510 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
13520 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
13530 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
13540 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
13550 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
13560 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
13570 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
13580 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
13590 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
135a0 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
135b0 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
135c0 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
135d0 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
135e0 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
135f0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
13600 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
13610 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
13620 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
13630 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
13640 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
13650 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
13680 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
13690 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
136a0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
136b0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
136c0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
136d0 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
136e0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
136f0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
13720 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13730 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
13740 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
13750 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
13760 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
13770 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
13780 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
13790 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
137a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
137b0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
137c0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
137d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
137e0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
137f0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
13800 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
13810 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
13820 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
13830 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
13840 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
13850 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
13860 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
13870 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
13880 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
13890 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
138a0 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
138b0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
138c0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
138d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
138e0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
138f0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13910 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
13920 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
13930 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
13940 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
13950 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
13960 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
13970 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13980 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
13990 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
139a0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
139b0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
139c0 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
139d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
139e0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
139f0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
13a00 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
13a10 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
13a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13a30 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
13a40 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
13a50 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
13a60 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13a70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
13a80 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
13a90 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
13aa0 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
13ab0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13ac0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
13ad0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13ae0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
13b10 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
13b20 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
13b30 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
13b60 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
13b70 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
13b80 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
13b90 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13ba0 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
13bb0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13bc0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
13bd0 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
13be0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
13bf0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
13c00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13c10 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13c20 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
13c30 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
13c40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13c50 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13c60 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13c70 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13c80 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
13c90 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13ca0 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
13cb0 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
13cc0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
13cd0 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
13ce0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
13cf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13d00 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
13d10 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
13d20 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
13d30 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
13d40 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
13d50 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
13d60 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
13d70 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
13d80 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13d90 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
13da0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
13db0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
13dc0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
13dd0 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
13de0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
13df0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
13e00 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
13e10 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
13e20 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
13e30 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
13e40 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
13e50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13e60 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
13e70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
13e80 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
13e90 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
13ea0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
13eb0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
13ec0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
13ed0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13ee0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
13ef0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
13f00 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
13f10 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
13f20 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
13f30 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
13f40 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13f50 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
13f60 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
13f70 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
13f80 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
13f90 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
13fa0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
13fb0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
13fc0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
13fd0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
13fe0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
13ff0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
14000 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
14010 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
14020 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
14030 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
14040 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
14050 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
14060 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
14070 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
14080 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
14090 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
140a0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
140b0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
140c0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
140d0 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
140e0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
140f0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
14100 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
14110 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
14120 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14130 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
14140 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
14150 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
14160 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
14170 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
14180 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14190 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
141a0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
141b0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
141c0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
141d0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
141e0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
141f0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
14200 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
14210 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
14220 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14230 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
14240 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
14250 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14260 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
14270 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
14280 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
14290 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
142a0 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
142b0 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
142c0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
142d0 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
142e0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
142f0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
14300 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
14310 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
14320 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
14330 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14340 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
14350 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
14360 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
14370 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14380 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
14390 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
143a0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
143b0 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
143c0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
143d0 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
143e0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
143f0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
14400 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
14410 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
14420 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
14430 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
14440 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14450 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
14460 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
14470 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
14480 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
14490 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
144a0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
144b0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
144c0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
144d0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
144e0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
144f0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
14500 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
14510 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
14520 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
14530 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14540 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
14550 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
14560 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
14570 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
14580 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
14590 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
145a0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
145b0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
145c0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
145d0 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
145e0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
145f0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
14600 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
14610 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
14620 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
14630 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
14640 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
14650 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
14660 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
14670 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
14680 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14690 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
146a0 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
146b0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
146c0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
146d0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
146e0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
146f0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
14700 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
14710 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
14720 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
14730 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14740 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
14750 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
14760 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
14770 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
14780 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
14790 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
147a0 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
147b0 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
147c0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
147d0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
147e0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
147f0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
14800 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
14810 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
14820 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
14830 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
14840 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
14850 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
14860 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
14870 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
14880 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
14890 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
148a0 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
148b0 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
148c0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
148d0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
148e0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
148f0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
14900 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
14910 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
14920 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
14930 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
14940 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
14950 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
14960 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
14970 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
14980 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
14990 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
149a0 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
149b0 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
149c0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
149d0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
149e0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
149f0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
14a00 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
14a10 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
14a20 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
14a30 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
14a40 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
14a50 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
14a60 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
14a70 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
14a80 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
14a90 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
14aa0 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
14ab0 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
14ac0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
14ad0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
14ae0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
14af0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
14b00 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
14b10 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
14b20 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
14b30 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
14b40 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
14b50 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
14b60 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
14b70 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
14b80 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
14b90 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
14ba0 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
14bb0 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
14bc0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
14bd0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
14be0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
14bf0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
14c00 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
14c10 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
14c20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
14c30 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
14c40 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
14c70 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
14c80 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
14c90 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
14ca0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
14cb0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
14cc0 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
14cd0 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
14ce0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
14cf0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
14d00 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
14d10 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
14d20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
14d30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
14d40 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
14d50 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
14d60 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
14d70 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
14d80 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
14d90 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
14da0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
14db0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
14dc0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
14dd0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
14de0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
14df0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
14e00 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
14e10 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
14e20 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
14e30 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14e40 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14e50 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14e60 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14e70 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14e80 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
14e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
14ed0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
14ee0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
14ef0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
14f00 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
14f10 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
14f20 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
14f30 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
14f40 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
14f50 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
14f60 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
14f70 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
14f80 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14f90 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
14fa0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
14fb0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
14fc0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
14fd0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14fe0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
14ff0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
15000 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
15010 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
15020 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
15030 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15040 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15050 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15060 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15070 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
15080 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
15090 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
150a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
150e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
150f0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
15100 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
15110 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
15120 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
15130 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
15140 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
15150 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
15160 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
15170 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
15180 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
15190 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
151c0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
151f0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
15200 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
15230 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
15240 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
15250 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
15260 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
15270 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
15280 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
15290 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
152c0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
152d0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
152e0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
152f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15300 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
15310 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
15320 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
15330 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
15340 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
15350 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
15360 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
15370 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
15380 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15390 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
153a0 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
153b0 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
153e0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
153f0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
15400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15410 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
15420 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
15430 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
15440 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15450 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
15460 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
15470 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
15480 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
15490 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
154a0 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
154b0 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
154c0 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
154d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
154e0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
154f0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
15500 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
15510 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
15520 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
15530 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
15540 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
15550 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
15560 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15570 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
15580 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
15590 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
155a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
155b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
155c0 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
155d0 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
155e0 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
155f0 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
15600 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
15610 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
15620 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
15630 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
15640 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
15650 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
15660 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
15670 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
15680 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
15690 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
156a0 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
156b0 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
156c0 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
156d0 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
156e0 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
156f0 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
15700 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
15710 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
15720 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
15730 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
15740 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
15750 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
15760 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
15770 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
15780 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
15790 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
157a0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
157b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
157c0 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
157d0 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
157e0 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
157f0 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
15800 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
15810 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
15820 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
15830 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
15840 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
15850 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
15860 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
15870 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
15880 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
15890 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
158a0 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
158b0 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
158c0 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
158d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
158e0 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
158f0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
15900 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15910 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
15920 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
15930 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
15940 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
15950 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
15960 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
15970 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
15980 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
15990 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
159a0 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
159b0 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
159c0 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
159d0 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
159e0 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
159f0 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
15a00 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
15a10 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
15a20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
15a30 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
15a40 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
15a50 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
15a60 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
15a70 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
15a80 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
15a90 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
15aa0 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
15ab0 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45  Node is a SQLITE
15ac0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
15ad0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15ae0 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
15af0 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
15b00 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
15b10 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
15b20 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
15b30 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
15b40 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
15b50 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
15b60 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f  T operator */../
15b70 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
15b80 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
15b90 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
15ba0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
15bb0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
15bc0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
15bd0 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
15be0 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
15bf0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15c00 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15c10 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15c20 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15c30 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15c40 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15c50 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
15c60 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
15c70 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
15c80 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
15c90 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
15ca0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
15cb0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
15cc0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15cd0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15ce0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15cf0 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15d00 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15d10 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15d20 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15d30 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15d40 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15d50 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
15d60 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15d70 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
15d80 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
15d90 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15da0 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
15db0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15dc0 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15dd0 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15de0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15df0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15e00 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15e10 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15e20 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
15e30 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15e40 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
15e50 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
15e60 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
15e70 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
15e80 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
15e90 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
15ea0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
15eb0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15ec0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
15ed0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15ee0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15ef0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15f00 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15f10 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
15f20 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
15f30 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
15f40 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
15f50 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
15f60 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
15f70 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
15f80 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
15f90 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
15fa0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
15fb0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
15fc0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
15fd0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15fe0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15ff0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
16000 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
16010 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
16020 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
16030 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
16040 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
16050 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
16060 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
16070 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
16080 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
16090 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
160a0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
160b0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
160c0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
160d0 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
160e0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
160f0 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
16100 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
16110 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
16120 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
16130 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
16140 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
16150 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
16160 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
16170 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
16180 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
16190 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
161a0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
161b0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
161c0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
161d0 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
161e0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
161f0 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
16200 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
16210 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
16220 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
16230 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
16240 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
16250 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
16260 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
16270 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
16280 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
16290 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
162a0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
162b0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
162c0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
162d0 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
162e0 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
162f0 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
16300 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
16310 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
16320 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
16330 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16340 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
16350 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
16360 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
16370 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
16380 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
16390 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
163a0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
163b0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
163c0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
163d0 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
163e0 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
163f0 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
16400 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
16410 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
16420 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
16430 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
16440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16450 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
16460 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
16470 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
16480 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
16490 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
164a0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
164b0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
164c0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
164d0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
164e0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
164f0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16500 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
16510 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
16520 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
16530 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
16540 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
16550 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
16560 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
16570 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
16580 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
16590 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
165a0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
165b0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
165c0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
165d0 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
165e0 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
165f0 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
16600 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
16610 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
16620 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
16630 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
16640 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
16650 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
16660 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
16670 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
16680 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
16690 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
166a0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
166b0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
166c0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
166d0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
166e0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
166f0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
16700 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16710 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
16720 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
16730 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
16740 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
16750 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
16760 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
16770 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
16780 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
16790 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
167a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
167b0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
167c0 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
167d0 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
167e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
167f0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
16800 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
16810 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
16820 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
16830 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
16840 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
16850 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
16860 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
16870 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
16880 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16890 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
168a0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
168b0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
168c0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
168d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
168e0 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
168f0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
16900 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
16910 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
16920 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
16930 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
16940 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16950 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16960 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16970 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
16980 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
16990 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
169a0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
169b0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
169c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
169d0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
169e0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
169f0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
16a00 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
16a10 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
16a20 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
16a30 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16a40 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16a50 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16a60 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16a70 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
16a80 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
16a90 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
16aa0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
16ab0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
16ac0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16ad0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16ae0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16af0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16b00 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16b10 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16b20 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16b30 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16b40 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16b50 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16b60 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16b70 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
16b80 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
16b90 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
16ba0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16bb0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16bc0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16bd0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16be0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16bf0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16c00 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16c10 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16c20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16c30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16c40 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16c50 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16c60 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16c70 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
16c80 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
16c90 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
16ca0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
16cb0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16cc0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16cd0 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16ce0 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16cf0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16d00 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16d10 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16d20 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16d30 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16d40 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16d50 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16d60 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16d70 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16d80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16d90 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16da0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16db0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16dc0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16dd0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16de0 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16df0 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16e00 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16e10 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16e20 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16e30 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16e40 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16e50 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
16e60 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16e70 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16e80 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
16e90 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
16ea0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
16eb0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16ec0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16ed0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16ee0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16ef0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16f00 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16f10 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16f20 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16f30 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16f40 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16f50 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
16f60 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16f70 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
16f80 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
16f90 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
16fa0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
16fb0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16fc0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16fd0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16fe0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16ff0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
17000 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
17010 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
17020 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
17030 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
17040 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
17050 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
17060 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
17070 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
17080 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
17090 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
170a0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
170b0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
170c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
170d0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
170e0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
170f0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
17100 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
17110 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
17120 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
17130 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
17140 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
17150 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
17160 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
17170 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
17180 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
17190 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
171a0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
171b0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
171c0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
171d0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
171e0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
171f0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
17200 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
17210 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
17220 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
17230 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
17240 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
17250 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
17260 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
17270 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
17280 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
17290 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
172a0 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
172b0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
172c0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
172d0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
172e0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
172f0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
17300 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
17310 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
17320 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
17330 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
17340 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
17350 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
17360 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
17370 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
17380 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17390 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
173a0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
173b0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
173c0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
173d0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
173e0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
173f0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
17400 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17410 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
17420 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
17430 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
17440 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17450 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
17460 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
17470 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
17480 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
17490 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
174a0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
174b0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
174c0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
174d0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
174e0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
174f0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
17500 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
17510 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
17520 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
17530 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
17540 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
17550 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
17560 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
17570 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
17580 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
17590 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
175a0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
175b0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
175c0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
175d0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
175e0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
175f0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
17600 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
17610 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
17620 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
17630 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
17640 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
17650 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
17660 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
17670 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
17680 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
17690 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
176a0 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
176b0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
176c0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
176d0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
176e0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
176f0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
17700 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
17710 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
17720 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
17730 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
17740 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
17750 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
17760 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
17770 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
17780 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
17790 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
177a0 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
177b0 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
177c0 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
177d0 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
177e0 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
177f0 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
17800 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
17810 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
17820 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
17830 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
17840 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
17850 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
17860 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
17870 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
17880 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
17890 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
178a0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
178b0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
178c0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
178d0 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
178e0 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
178f0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
17900 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
17910 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
17920 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
17930 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
17940 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
17950 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
17960 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
17970 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
17980 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
17990 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
179a0 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
179b0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
179c0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
179d0 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
179e0 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17a00 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
17a10 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
17a20 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
17a30 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
17a40 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
17a50 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
17a60 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
17a70 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
17a80 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
17a90 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
17aa0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
17ab0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
17ac0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
17ad0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
17ae0 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
17af0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
17b00 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
17b10 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
17b20 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
17b30 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17b40 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
17b50 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
17b60 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
17b70 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
17b80 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
17b90 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
17ba0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
17bb0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
17bc0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
17bd0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
17be0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
17bf0 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
17c00 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
17c10 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
17c20 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
17c30 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
17c40 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
17c50 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
17c60 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
17c70 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
17c80 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
17c90 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
17ca0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
17cb0 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
17cc0 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
17cd0 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
17ce0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
17cf0 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
17d00 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
17d10 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
17d20 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
17d30 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
17d40 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
17d50 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
17d60 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
17d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17d80 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
17d90 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
17da0 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
17db0 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
17dc0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17dd0 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
17de0 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
17df0 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
17e00 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
17e10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
17e20 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
17e30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
17e40 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
17e50 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
17e60 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
17e70 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
17e80 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
17e90 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
17ea0 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
17eb0 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
17ec0 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
17ed0 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
17ee0 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
17ef0 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
17f00 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45  HERE_NO_AUTOINDE
17f10 58 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20  X     0x0080 /* 
17f20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74  Disallow automat
17f30 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
17f40 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
17f50 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
17f60 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
17f70 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
17f80 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
17f90 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
17fa0 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
17fb0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
17fc0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
17fd0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
17fe0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
17ff0 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
18000 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
18010 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
18020 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
18030 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
18040 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
18050 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
18060 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
18070 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
18080 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
18090 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
180a0 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
180b0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
180c0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
180d0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
180e0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
180f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
18100 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
18110 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
18120 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
18130 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18140 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
18150 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
18160 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
18170 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
18180 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
18190 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
181a0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
181b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
181c0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
181d0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
181e0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
181f0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
18200 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
18210 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
18220 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
18230 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
18240 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
18250 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
18260 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
18270 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
18280 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
18290 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
182a0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
182b0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
182c0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
182d0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
182e0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
182f0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
18300 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
18310 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
18320 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
18330 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
18340 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
18350 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
18360 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
18370 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
18380 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
18390 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
183a0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
183b0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
183c0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
183d0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
183e0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
183f0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
18400 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
18410 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
18420 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
18430 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
18440 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
18450 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
18460 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
18470 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
18480 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
18490 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
184a0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
184b0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
184c0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
184d0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
184e0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
184f0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
18500 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
18510 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
18520 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
18530 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
18540 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
18550 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
18560 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
18570 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
18580 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
18590 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
185a0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
185b0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
185c0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
185d0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
185e0 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
185f0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
18600 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
18610 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
18620 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
18630 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
18640 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
18650 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
18660 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
18670 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
18680 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
18690 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
186a0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
186b0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
186c0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
186d0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
186e0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
186f0 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
18700 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
18710 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
18720 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
18730 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
18740 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
18750 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
18760 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
18770 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
18780 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
18790 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
187a0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
187b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
187c0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
187d0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
187e0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
187f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18800 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
18810 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
18820 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
18830 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
18840 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
18850 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
18860 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
18870 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
18880 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
18890 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
188a0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
188b0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ield..**.** Note
188c0 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  :  NC_MinMaxAgg 
188d0 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61  must have the sa
188e0 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d  me value as SF_M
188f0 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20  inMaxAgg and.** 
18900 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
18910 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69  AX..** .*/.#defi
18920 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
18930 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
18940 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
18950 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
18960 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
18970 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20  sAgg    0x0002  
18980 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
18990 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
189a0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
189b0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
189c0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
189d0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
189e0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
189f0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
18a00 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
18a10 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
18a20 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
18a30 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
18a40 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
18a50 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
18a60 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69  x0010  /* True i
18a70 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
18a80 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
18a90 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
18aa0 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30  IdxExpr   0x0020
18ab0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
18ac0 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  olving columns o
18ad0 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  f CREATE INDEX *
18ae0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
18af0 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
18b00 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
18b10 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
18b20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
18b30 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
18b40 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18b50 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
18b60 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
18b70 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
18b80 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
18b90 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
18ba0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
18bb0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
18bc0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
18bd0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
18be0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
18bf0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
18c00 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
18c10 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
18c20 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
18c30 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
18c40 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
18c50 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
18c60 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
18c70 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
18c80 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
18c90 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
18ca0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
18cb0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
18cc0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
18cd0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
18ce0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
18cf0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
18d00 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
18d10 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
18d20 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
18d30 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
18d40 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
18d50 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
18d60 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
18d70 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
18d80 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
18d90 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
18da0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
18db0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
18dc0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
18dd0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
18de0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
18df0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18e00 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
18e10 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
18e20 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
18e30 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
18e40 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
18e50 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
18e60 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
18e70 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
18e80 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
18e90 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
18ea0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
18eb0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
18ec0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
18ed0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18ee0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
18ef0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
18f00 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
18f10 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
18f20 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
18f30 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
18f40 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
18f50 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
18f60 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
18f70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
18f80 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
18f90 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
18fa0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
18fb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18fc0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
18fd0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
18fe0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
18ff0 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
19000 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
19010 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
19020 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
19030 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
19040 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
19050 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
19060 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
19070 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
19080 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
19090 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
190a0 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
190b0 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
190c0 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
190d0 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
190e0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
190f0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
19100 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
19110 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
19120 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
19130 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52  /.  u64 nSelectR
19140 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  ow;        /* Es
19150 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
19160 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
19170 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
19180 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
19190 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
191a0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
191b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
191c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
191d0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
191e0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
191f0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
19200 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
19210 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
19220 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
19230 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
19240 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
19250 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
19260 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
19270 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
19280 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
19290 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
192a0 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
192b0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
192c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
192d0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
192e0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
192f0 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
19300 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
19310 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
19320 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
19330 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
19340 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
19350 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
19360 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
19370 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
19380 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
19390 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
193a0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
193b0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
193c0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
193d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
193e0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
193f0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
19400 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
19410 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
19420 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
19430 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
19440 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
19450 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
19460 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
19470 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
19480 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78  l             0x
19490 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
194a0 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
194b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
194c0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
194d0 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  0x0004  /* Ident
194e0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
194f0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
19500 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
19510 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20  e       0x0008  
19520 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
19530 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19540 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
19550 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
19560 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68  0010  /* Uses th
19570 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
19580 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
19590 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
195a0 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
195b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
195c0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
195d0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
195e0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
195f0 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52     0x0040  /* FR
19600 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
19610 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
19620 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
19630 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20  Compound        
19640 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20  0x0080  /* Part 
19650 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
19660 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ery */.#define S
19670 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
19680 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e    0x0100  /* Syn
19690 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
196a0 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
196b0 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56  define SF_MultiV
196c0 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30 30  alue      0x0200
196d0 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55    /* Single VALU
196e0 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c  ES term with mul
196f0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
19700 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
19710 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30 20  rom      0x0400 
19720 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
19730 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
19740 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
19750 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
19760 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a  rt    0x0800  /*
19770 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
19780 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
19790 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
197a0 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
197b0 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
197c0 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
197d0 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
197e0 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ax() */.#define 
197f0 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
19800 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68     0x2000  /* Th
19810 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
19820 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
19830 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
19840 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
19850 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20    0x4000  /* By 
19860 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
19870 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
19880 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
19890 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
198a0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
198b0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
198c0 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
198d0 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
198e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
198f0 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
19900 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
19910 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
19920 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
19930 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
19940 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19950 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
19960 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
19970 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19980 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
19990 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
199a0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
199b0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
199c0 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
199d0 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
199e0 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
199f0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19a00 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
19a10 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
19a20 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
19a30 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
19a40 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
19a60 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
19a70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
19a80 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
19a90 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
19aa0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
19ab0 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
19ae0 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
19af0 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
19b00 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19b10 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
19b20 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
19b30 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
19b40 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
19b50 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
19b60 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
19b70 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
19b80 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
19b90 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
19ba0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19bb0 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
19bc0 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
19bd0 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
19be0 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
19bf0 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19c10 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
19c20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
19c30 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
19c40 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19c50 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
19c60 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
19c70 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
19ca0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
19cb0 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
19cc0 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
19cd0 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
19ce0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
19cf0 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
19d00 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
19d30 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
19d40 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
19d50 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
19d60 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
19d70 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
19d80 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
19d90 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
19da0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19db0 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
19dc0 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
19dd0 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
19de0 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
19e10 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
19e20 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
19e30 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
19e40 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19e50 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
19e60 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
19e70 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
19e80 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
19e90 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
19ea0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19eb0 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19ec0 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19ee0 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19ef0 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19f00 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19f30 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
19f40 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
19f50 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19f60 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
19f70 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
19f80 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
19f90 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19fc0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19fd0 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19fe0 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19ff0 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
1a000 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
1a030 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
1a040 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
1a050 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
1a060 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1a070 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
1a080 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1a090 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1a0a0 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
1a0b0 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
1a0c0 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
1a0d0 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
1a0e0 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
1a0f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a100 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
1a110 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
1a120 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1a130 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
1a140 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
1a150 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1a160 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1a170 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
1a180 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
1a190 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
1a1a0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
1a1b0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
1a1d0 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
1a1e0 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
1a1f0 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a210 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
1a220 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
1a230 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
1a240 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a250 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
1a260 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1a270 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
1a280 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
1a290 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
1a2a0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1a2b0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
1a2e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1a2f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
1a300 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1a310 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
1a320 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
1a330 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
1a340 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
1a350 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a360 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
1a370 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
1a380 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
1a390 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
1a3a0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1a3b0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1a3c0 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1a3d0 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
1a400 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
1a410 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
1a420 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
1a450 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a460 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
1a470 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1a480 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1a490 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
1a4a0 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
1a4b0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
1a4c0 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
1a4d0 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
1a4e0 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
1a510 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
1a520 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
1a530 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
1a540 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1a550 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
1a560 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
1a570 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1a580 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
1a590 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
1a5a0 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
1a5b0 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
1a5c0 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
1a5d0 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
1a5e0 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
1a5f0 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
1a600 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1a610 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
1a620 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
1a630 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
1a640 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
1a650 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
1a660 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a670 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1a680 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1a690 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
1a6a0 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
1a6b0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
1a6c0 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
1a6d0 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
1a6e0 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
1a6f0 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
1a700 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
1a710 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
1a720 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1a730 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
1a740 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
1a750 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1a760 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
1a770 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
1a780 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
1a790 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
1a7a0 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
1a7b0 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1a7c0 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1a7d0 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1a7e0 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1a7f0 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1a800 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1a810 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1a820 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1a830 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a840 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1a850 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1a860 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1a870 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1a880 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1a890 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a8a0 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1a8b0 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1a8c0 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1a8d0 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1a8e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1a8f0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1a900 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1a910 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1a920 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1a930 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a940 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1a950 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a960 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a970 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1a980 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1a990 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1a9a0 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1a9b0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1a9c0 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1a9d0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1a9e0 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1a9f0 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1aa00 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1aa10 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1aa20 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1aa30 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1aa40 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
1aa50 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
1aa60 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1aa70 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1aa80 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1aa90 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1aaa0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1aab0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1aac0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1aad0 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1aae0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1aaf0 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1ab00 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1ab10 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1ab20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ab30 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1ab40 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
1ab50 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1ab60 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1ab70 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1ab80 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1ab90 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1aba0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1abb0 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1abc0 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1abd0 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1abe0 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
1abf0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1ac00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1ac10 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1ac20 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1ac30 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1ac40 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1ac50 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1ac60 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1ac70 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1ac80 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1ac90 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1aca0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1acb0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1acc0 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1acd0 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1ace0 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
1acf0 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1ad00 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1ad10 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1ad20 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1ad30 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1ad40 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1ad50 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1ad60 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1ad70 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1ad80 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ad90 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1ada0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1adb0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1adc0 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1add0 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1ade0 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1adf0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1ae00 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1ae10 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1ae20 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ae40 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1ae50 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1ae60 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1ae70 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1ae80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1ae90 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1aea0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1aeb0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1aec0 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1aed0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1aee0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1aef0 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1af00 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1af10 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1af20 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1af30 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1af40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1af50 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1af60 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1af70 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1af80 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1af90 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1afa0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1afb0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1afc0 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1afd0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1afe0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1aff0 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1b000 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1b010 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1b020 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1b030 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1b040 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1b050 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1b060 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1b070 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1b080 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1b090 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1b0a0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1b0b0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1b0c0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1b0d0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1b0e0 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1b0f0 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1b100 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1b110 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1b120 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1b130 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1b140 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1b150 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1b160 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1b170 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1b180 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1b190 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1b1a0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1b1b0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1b1c0 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1b1d0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1b1e0 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1b1f0 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1b200 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1b210 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1b220 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1b230 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1b240 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1b250 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1b260 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1b270 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1b280 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1b290 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1b2a0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1b2b0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1b2c0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1b2d0 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1b2e0 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1b2f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1b300 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1b310 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1b320 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1b330 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1b340 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1b350 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1b360 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1b370 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1b380 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1b390 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b3a0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1b3b0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1b3c0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1b3d0 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1b3e0 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1b3f0 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1b400 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1b410 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1b420 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1b430 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1b440 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1b450 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1b460 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1b470 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1b480 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1b490 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1b4a0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1b4b0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1b4c0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1b4d0 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1b4e0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1b4f0 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1b500 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1b510 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b520 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1b530 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1b540 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1b550 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b560 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1b570 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1b580 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1b590 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1b5a0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1b5b0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1b5c0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1b5d0 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1b5e0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1b5f0 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1b600 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1b610 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1b620 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1b630 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1b640 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1b650 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1b660 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1b670 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1b680 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1b690 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1b6a0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1b6b0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1b6c0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1b6d0 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1b6e0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1b6f0 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1b700 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1b710 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1b720 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1b730 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1b740 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1b750 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1b760 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1b770 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1b780 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1b790 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1b7a0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1b7b0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1b7c0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1b7d0 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1b7e0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1b7f0 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1b800 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1b810 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1b820 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1b830 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1b840 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1b850 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1b860 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1b870 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1b880 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1b890 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1b8a0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1b8b0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1b8c0 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1b8d0 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1b8e0 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1b8f0 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1b900 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1b910 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1b920 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1b930 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1b940 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1b950 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1b960 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1b970 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1b980 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1b990 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1b9a0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1b9b0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1b9c0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b9d0 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1b9e0 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1b9f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1ba00 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1ba10 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1ba20 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1ba30 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1ba40 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1ba50 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1ba60 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1ba70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1ba80 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1ba90 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1baa0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1bab0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1bac0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1bad0 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1bae0 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1baf0 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1bb00 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1bb10 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1bb20 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1bb30 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1bb40 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1bb50 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1bb60 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1bb70 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1bb80 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1bb90 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1bba0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1bbb0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1bbc0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1bbd0 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1bbe0 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1bbf0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1bc00 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1bc10 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1bc20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1bc30 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1bc40 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1bc50 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1bc60 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1bc70 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1bc80 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1bc90 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1bca0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1bcb0 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1bcc0 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1bcd0 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1bce0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1bcf0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1bd00 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1bd10 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1bd20 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1bd30 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1bd40 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1bd50 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1bd60 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1bd70 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1bd80 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1bd90 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1bda0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1bdb0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1bdc0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1bdd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bde0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1bdf0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1be00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1be10 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1be20 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1be30 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1be40 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1be50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1be60 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1be70 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1be80 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1be90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1bea0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1beb0 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1bec0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bed0 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1bee0 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1bef0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1bf00 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1bf10 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1bf20 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1bf30 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1bf40 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1bf50 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1bf60 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1bf70 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1bf80 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1bf90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1bfa0 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1bfb0 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1bfc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1bfd0 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
1bfe0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1bff0 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68 6f 73  of an index whos
1c000 65 20 65 78 70 72 73 20 61 72 65 20 62 65 69 6e  e exprs are bein
1c010 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74  g coded */.  int
1c020 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1c030 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1c040 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1c050 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1c060 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1c070 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1c080 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1c090 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1c0a0 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1c0b0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1c0c0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1c0d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1c0e0 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1c0f0 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1c100 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1c110 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1c120 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
1c130 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
1c140 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
1c150 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
1c160 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
1c170 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
1c180 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1c190 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
1c1a0 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
1c1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
1c1c0 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
1c1d0 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
1c1e0 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
1c1f0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1c200 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
1c210 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
1c220 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
1c230 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
1c240 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
1c250 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
1c260 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
1c270 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
1c280 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
1c290 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
1c2a0 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
1c2b0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
1c2c0 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
1c2d0 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
1c2e0 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
1c2f0 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
1c300 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c310 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
1c320 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1c330 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
1c340 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
1c350 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
1c360 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
1c370 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
1c380 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
1c390 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
1c3a0 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
1c3b0 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
1c3c0 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
1c3d0 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
1c3e0 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
1c3f0 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
1c400 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
1c410 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51  t cookieValue[SQ
1c420 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1c430 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
1c440 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
1c450 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72  erify */.  int r
1c460 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
1c470 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1c480 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
1c490 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
1c4a0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
1c4b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
1c4c0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1c4d0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
1c4e0 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
1c4f0 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
1c500 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
1c510 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
1c520 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
1c530 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23  sub-program */.#
1c540 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1c550 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65  NABLED.  int nSe
1c560 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
1c570 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
1c580 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65  T statements see
1c590 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65  n */.  int nSele
1c5a0 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48  ctIndent;   /* H
1c5b0 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74  ow far to indent
1c5c0 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f   SELECTTRACE() o
1c5d0 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1c5e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c5f0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1c600 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1c610 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1c620 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1c630 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1c640 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1c650 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1c660 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1c670 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1c680 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1c690 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1c6a0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1c6b0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1c6c0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1c6d0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
1c6e0 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
1c6f0 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
1c700 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
1c710 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1c720 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1c730 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1c740 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1c750 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1c760 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1c770 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1c780 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1c790 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1c7a0 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1c7b0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1c7c0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1c7d0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1c7e0 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
1c7f0 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
1c800 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
1c810 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
1c820 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
1c830 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
1c840 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1c850 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1c860 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1c870 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
1c880 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1c890 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
1c8a0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1c8b0 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
1c8c0 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
1c8d0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
1c8e0 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
1c8f0 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
1c900 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
1c910 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
1c920 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
1c930 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
1c940 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
1c950 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
1c960 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
1c970 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
1c980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c9a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c9b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
1c9c0 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
1c9d0 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
1c9e0 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
1c9f0 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
1ca00 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
1ca10 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
1ca20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
1ca30 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
1ca40 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
1ca50 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
1ca60 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29  etof(Parse,nVar)
1ca70 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65   so the nVar fie
1ca80 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 20 66  ld must be the f
1ca90 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20  irst field.  ** 
1caa0 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
1cab0 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a   region..  *****
1cac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1caf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb00 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  ***/..  int nVar
1cb10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cb20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
1cb30 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
1cb40 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
1cb50 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
1cb60 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1cb70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cb80 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
1cb90 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
1cba0 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
1cbb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
1cbc0 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
1cbd0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1cbe0 20 2a 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69   */.  u8 bFreeWi
1cbf0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1cc00 2f 2a 20 54 72 75 65 20 69 66 20 70 57 69 74 68  /* True if pWith
1cc10 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
1cc20 20 77 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a   with parser */.
1cc30 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1cc50 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
1cc60 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
1cc70 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
1cc80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1cc90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1cca0 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  E.  u8 declareVt
1ccb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
1ccc0 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
1ccd0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1cce0 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
1ccf0 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
1cd00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cd10 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
1cd20 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
1cd30 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73  dif.  int nAlias
1cd40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cd50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69  /* Number of ali
1cd60 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ased result set 
1cd70 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74  columns */.  int
1cd80 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1cd90 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1cda0 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1cdb0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1cdc0 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1cdd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1cde0 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1cdf0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1ce00 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1ce10 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1ce20 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1ce30 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1ce40 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1ce50 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1ce60 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1ce70 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1ce80 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
1ce90 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1cea0 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
1ceb0 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
1cec0 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
1ced0 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
1cee0 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
1cef0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
1cf00 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
1cf10 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1cf20 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
1cf30 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
1cf40 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
1cf50 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
1cf60 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
1cf70 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
1cf80 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
1cf90 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
1cfa0 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
1cfb0 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
1cfc0 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
1cfd0 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
1cfe0 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
1cff0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
1d000 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1d010 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
1d020 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
1d030 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
1d040 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1d050 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  meToken;        
1d060 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
1d070 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
1d080 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
1d090 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
1d0a0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1d0b0 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
1d0c0 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66  arsed */.#ifndef
1d0d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1d0e0 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
1d0f0 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
1d100 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
1d110 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
1d120 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
1d130 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
1d140 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
1d150 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
1d160 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
1d170 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
1d180 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
1d190 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
1d1a0 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
1d1b0 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
1d1c0 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
1d1d0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1d1e0 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
1d1f0 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
1d200 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
1d210 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1d220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1d230 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
1d240 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
1d250 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  /.};../*.** Retu
1d260 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
1d270 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
1d280 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1d290 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
1d2a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1d2b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1d2c0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1d2d0 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
1d2e0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
1d2f0 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
1d300 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
1d310 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1d320 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1d330 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1d340 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
1d350 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
1d360 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
1d370 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
1d380 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
1d390 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
1d3a0 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
1d3b0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
1d3c0 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
1d3d0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
1d3e0 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
1d3f0 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
1d400 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
1d410 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1d420 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d430 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
1d440 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
1d450 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
1d460 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
1d470 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
1d480 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  es..*/.#define O
1d490 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1d4a0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
1d4b0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1d4c0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
1d4d0 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
1d4e0 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
1d4f0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
1d500 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
1d510 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
1d520 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1d530 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
1d540 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1d550 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
1d560 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1d570 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
1d580 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
1d590 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
1d5a0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
1d5b0 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
1d5c0 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
1d5d0 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
1d5e0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
1d5f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
1d600 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1d610 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
1d620 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
1d630 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
1d640 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1d650 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
1d660 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
1d670 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1d680 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
1d690 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d6a0 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
1d6b0 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
1d6c0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1d6d0 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
1d6e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
1d6f0 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
1d700 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
1d710 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
1d720 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
1d730 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
1d740 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
1d750 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
1d760 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
1d770 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1d780 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1d790 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1d7a0 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
1d7b0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
1d7c0 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
1d7d0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
1d7e0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1d7f0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
1d800 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
1d810 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
1d820 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
1d830 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1d840 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
1d850 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
1d860 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
1d870 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
1d880 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
1d890 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1d8a0 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
1d8b0 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
1d8c0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
1d8d0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
1d8e0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
1d8f0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
1d900 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
1d910 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
1d920 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
1d930 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
1d940 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
1d950 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
1d960 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1d970 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
1d980 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
1d990 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
1d9a0 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
1d9b0 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
1d9c0 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
1d9d0 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
1d9e0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
1d9f0 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
1da00 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
1da10 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
1da20 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
1da30 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
1da40 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
1da50 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
1da60 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
1da70 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1da80 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
1da90 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
1daa0 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
1dab0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
1dac0 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
1dad0 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
1dae0 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
1daf0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1db00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
1db10 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
1db20 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
1db30 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
1db40 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
1db50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
1db60 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
1db70 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
1db80 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
1db90 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1dba0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1dbb0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1dbc0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
1dbd0 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
1dbe0 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1dbf0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1dc00 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1dc10 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1dc20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1dc30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1dc40 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1dc50 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1dc60 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1dc70 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1dc80 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1dc90 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1dca0 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1dcb0 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1dce0 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1dcf0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1dd00 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1dd10 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1dd20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1dd30 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1dd40 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1dd50 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1dd60 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1dd70 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1dd80 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1dd90 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1dda0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1ddb0 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1ddc0 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1ddd0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1dde0 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1ddf0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1de00 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1de10 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1de20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1de30 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1de40 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1de50 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1de60 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1de70 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
1de80 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
1de90 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
1dea0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
1deb0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
1dec0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
1ded0 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
1dee0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
1def0 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
1df00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
1df10 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
1df20 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
1df30 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
1df40 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
1df50 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1df60 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1df70 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
1df80 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
1df90 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
1dfa0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1dfb0 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
1dfc0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1dfd0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
1dfe0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
1dff0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
1e000 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
1e010 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
1e020 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
1e030 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1e040 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
1e050 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1e060 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1e070 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1e080 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1e090 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1e0a0 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1e0b0 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1e0c0 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
1e0d0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1e0e0 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1e0f0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1e100 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1e110 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1e120 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1e130 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1e140 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1e150 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1e160 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
1e170 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1e180 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1e190 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1e1a0 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1e1b0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1e1c0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1e1d0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1e1e0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1e1f0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1e200 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1e210 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1e220 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1e230 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1e240 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1e250 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1e260 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
1e270 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
1e280 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1e290 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
1e2a0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1e2b0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1e2c0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
1e2d0 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
1e2e0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1e2f0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1e300 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
1e310 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
1e320 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1e330 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
1e340 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1e350 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
1e360 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
1e370 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20  ES ... . *      
1e380 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1e390 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
1e3a0 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
1e3b0 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
1e3c0 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
1e3d0 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
1e3e0 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
1e3f0 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
1e400 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1e410 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1e420 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
1e430 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1e440 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1e450 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
1e460 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1e470 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1e480 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1e490 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
1e4a0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
1e4b0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
1e4c0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
1e4d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1e4e0 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
1e4f0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1e500 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1e510 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1e520 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1e530 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1e540 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1e550 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
1e560 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
1e570 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
1e580 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
1e590 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
1e5a0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
1e5b0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
1e5c0 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
1e5d0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
1e5e0 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
1e5f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
1e600 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
1e610 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1e620 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e640 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1e650 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1e660 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1e670 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1e680 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1e690 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1e6a0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1e6b0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1e6c0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1e6d0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1e6e0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1e6f0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1e700 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
1e710 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1e720 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
1e730 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
1e740 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
1e750 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1e760 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1e770 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1e780 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1e790 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1e7a0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1e7b0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1e7c0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1e7d0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1e7e0 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1e7f0 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
1e800 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
1e810 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
1e820 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
1e830 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
1e840 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
1e850 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
1e860 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1e870 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
1e880 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
1e890 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
1e8a0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
1e8b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1e8c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1e8d0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
1e8e0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
1e8f0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
1e900 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
1e910 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
1e920 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
1e930 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
1e940 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
1e950 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
1e960 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
1e970 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
1e980 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
1e990 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
1e9a0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
1e9b0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
1e9c0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
1e9d0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1e9e0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
1e9f0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
1ea00 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
1ea10 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
1ea20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
1ea30 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
1ea40 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
1ea50 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1ea60 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1ea70 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1ea80 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1ea90 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1eaa0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1eab0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1eac0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1ead0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1eae0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1eaf0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1eb00 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1eb10 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1eb20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1eb30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1eb40 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1eb50 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1eb60 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1eb70 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1eb80 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1eb90 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1eba0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1ebb0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1ebc0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1ebd0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1ebe0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1ebf0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1ec00 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1ec10 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1ec20 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1ec30 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1ec40 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1ec50 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1ec60 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1ec70 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1ec80 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1ec90 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1eca0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1ecb0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1ecc0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1ecd0 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1ece0 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1ecf0 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1ed00 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1ed10 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1ed20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1ed30 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
1ed40 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
1ed50 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
1ed60 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
1ed70 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
1ed80 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
1ed90 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d  CCUM_TOOBIG */.}
1eda0 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
1edb0 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
1edc0 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
1edd0 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41  OBIG  2../*.** A
1ede0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1edf0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1ee00 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1ee10 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1ee20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1ee30 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1ee40 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1ee50 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1ee60 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1ee70 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1ee80 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1ee90 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1eea0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1eeb0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1eec0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1eed0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1eee0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1eef0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1ef00 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1ef10 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1ef20 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1ef30 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ef50 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1ef60 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1ef70 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1ef80 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1ef90 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1efa0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1efb0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1efc0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1efd0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1efe0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1eff0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1f000 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1f010 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1f020 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f040 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1f050 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1f060 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1f070 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1f080 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f090 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1f0a0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1f0b0 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f0d0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1f0e0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1f0f0 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1f120 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1f130 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1f140 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1f170 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1f180 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1f190 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f1b0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
1f1c0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
1f1d0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f1f0 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
1f200 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
1f210 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
1f220 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1f230 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f240 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1f250 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
1f260 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1f290 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
1f2a0 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t */.  sqlite3_m
1f2b0 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
1f2c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
1f2d0 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
1f2e0 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
1f2f0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
1f300 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
1f310 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
1f320 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
1f330 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1f340 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
1f350 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
1f360 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
1f370 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
1f380 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
1f3b0 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
1f3c0 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
1f3f0 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
1f400 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f420 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
1f430 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
1f440 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1f450 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
1f460 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
1f470 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
1f480 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
1f490 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1f4b0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
1f4c0 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
1f4d0 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f4f0 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
1f500 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
1f510 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1f520 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1f530 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
1f540 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1f550 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f570 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
1f580 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
1f590 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
1f5c0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1f5d0 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f5f0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
1f600 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
1f610 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f640 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
1f650 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
1f660 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
1f670 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
1f680 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
1f690 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
1f6a0 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
1f6b0 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
1f6c0 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
1f6d0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1f6e0 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
1f6f0 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
1f720 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
1f730 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1f740 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1f750 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1f760 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1f770 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1f780 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1f790 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1f7a0 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7c0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1f7d0 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1f7e0 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1f7f0 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1f800 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1f810 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f820 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1f830 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1f840 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1f850 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1f860 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f870 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1f880 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1f890 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1f8a0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1f8b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1f8c0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1f8d0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1f8e0 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1f910 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1f920 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
1f930 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1f940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f950 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1f960 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1f970 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1f980 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1f990 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1f9a0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1f9b0 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
1f9c0 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1f9d0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1f9e0 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1f9f0 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1fa00 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1fa30 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1fa40 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1fa50 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1fa60 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1fa70 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1fa80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1fa90 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1faa0 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
1fab0 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1fac0 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
1fad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
1fae0 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
1faf0 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
1fb00 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
1fb10 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
1fb20 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
1fb30 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
1fb40 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1fb50 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
1fb60 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
1fb70 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
1fb80 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
1fb90 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
1fba0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
1fbb0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
1fbc0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
1fbf0 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
1fc00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fc10 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1fc20 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
1fc30 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
1fc40 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
1fc50 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
1fc60 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
1fc70 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
1fc80 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
1fc90 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
1fca0 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
1fcb0 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
1fcc0 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
1fcd0 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
1fce0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1fcf0 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
1fd00 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
1fd10 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
1fd20 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
1fd30 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
1fd40 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
1fd50 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
1fd60 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
1fd70 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1fd80 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
1fd90 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
1fda0 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
1fdb0 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
1fdc0 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
1fdd0 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
1fde0 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
1fdf0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
1fe00 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
1fe10 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
1fe20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
1fe30 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
1fe40 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
1fe50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
1fe60 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
1fe70 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
1fe80 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
1fe90 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
1fea0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1feb0 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
1fec0 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
1fed0 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
1fee0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1fef0 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
1ff00 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
1ff10 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
1ff20 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
1ff30 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1ff40 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1ff50 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1ff60 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1ff70 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1ff80 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1ff90 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1ffa0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1ffb0 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1ffc0 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1ffd0 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1ffe0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1fff0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
20000 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
20010 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
20020 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
20030 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
20040 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
20050 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
20060 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
20090 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
200a0 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
200d0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
200e0 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20110 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
20120 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
20130 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
20160 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
20170 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
20180 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
201b0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
201c0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
201f0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
20200 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20220 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
20230 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
20240 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
20250 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20270 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
20280 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
20290 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
202b0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
202c0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
202d0 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
202e0 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
202f0 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
20300 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
20310 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
20320 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
20330 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
20340 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
20350 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
20360 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
20370 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
20380 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
20390 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
203a0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
203b0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
203c0 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a   Select*);../*.*
203d0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
203e0 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
203f0 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
20400 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
20410 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
20420 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
20430 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
20440 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
20450 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
20460 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
20470 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
20480 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
20490 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
204a0 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
204b0 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
204c0 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
204d0 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
204e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
204f0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
20500 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
20510 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
20520 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
20530 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
20540 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
20550 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
20560 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
20570 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
20580 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
205b0 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
205c0 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
205d0 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
205e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
205f0 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
20600 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
20610 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
20640 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
20650 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
20660 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
20690 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
206a0 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
206b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
206c0 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
206d0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
206e0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
206f0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
20700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20710 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
20720 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
20730 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74   const char *zCt
20740 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  eErr;           
20750 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
20760 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
20770 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
20780 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65   a[1];.};..#ifde
20790 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
207a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
207b0 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77   of the TreeView
207c0 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
207d0 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65  for printing the
207e0 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64   content of.** d
207f0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f  ata structures o
20800 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  n sqlite3DebugPr
20810 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74  intf() using a t
20820 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a  ree-like view..*
20830 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65  /.struct TreeVie
20840 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c  w {.  int iLevel
20850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20860 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20   Which level of 
20870 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20  the tree we are 
20880 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e  on */.  u8  bLin
20890 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20  e[100];         
208a0 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c  /* Draw vertical
208b0 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20   in column i if 
208c0 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65  bLine[i] is true
208d0 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a   */.};.#endif /*
208e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
208f0 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
20900 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
20910 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
20920 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
20930 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
20940 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
20950 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
20960 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
20970 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
20980 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
20990 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
209a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209b0 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
209c0 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
209f0 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
20a00 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
20a10 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
20a20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
20a70 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
20a80 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
20a90 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
20aa0 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
20ab0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
20ac0 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
20ad0 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
20ae0 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
20af0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
20b00 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
20b10 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
20b20 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
20b30 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
20b40 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
20b50 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
20b60 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
20b70 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
20b80 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
20b90 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
20ba0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
20bb0 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
20bc0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
20bd0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
20be0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
20bf0 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
20c00 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
20c10 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
20c20 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
20c30 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
20c40 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
20c50 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
20c60 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
20c70 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
20c80 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
20c90 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
20ca0 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a  _LINE__).../*.**
20cb0 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
20cc0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
20cd0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
20ce0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
20cf0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
20d00 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
20d10 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
20d20 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
20d30 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
20d40 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
20d50 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
20d60 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
20d70 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
20d80 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20d90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
20da0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
20db0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
20dc0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
20dd0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
20de0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
20df0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
20e00 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
20e10 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
20e20 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
20e30 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
20e40 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
20e50 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
20e60 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
20e70 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
20e80 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
20e90 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
20ea0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
20eb0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
20ec0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
20ed0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
20ee0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
20ef0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
20f00 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
20f10 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
20f20 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
20f30 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
20f40 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
20f50 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
20f60 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
20f70 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
20f80 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
20f90 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
20fa0 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
20fb0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
20fc0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
20fd0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
20fe0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
20ff0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
21000 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
21010 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21020 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
21030 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
21040 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
21050 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
21060 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
21070 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21080 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
21090 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
210a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
210b0 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
210c0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
210d0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
210e0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
210f0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
21100 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21110 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
21120 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
21130 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21140 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
21150 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
21160 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
21170 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
21180 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
21190 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
211a0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
211b0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
211c0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
211d0 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
211e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
211f0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
21200 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
21210 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
21220 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
21230 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
21240 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
21250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21260 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
21270 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
21280 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
21290 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
212a0 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
212b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
212c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
212d0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
212e0 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
212f0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
21300 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
21310 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
21320 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
21330 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21340 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
21350 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
21360 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21370 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
21380 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
21390 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e  EOPTION_DIAGS.in
213a0 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  t sqlite3IsIdCha
213b0 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  r(u8);.#endif../
213c0 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
213d0 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
213e0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c  s.*/.#define sql
213f0 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69  ite3StrICmp sqli
21400 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20  te3_stricmp.int 
21410 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
21420 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
21430 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
21440 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
21450 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
21460 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
21470 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
21480 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
21490 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
214a0 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64  alloc(u64);.void
214b0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
214c0 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  ero(u64);.void *
214d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
214e0 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  ero(sqlite3*, u6
214f0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
21500 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
21510 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
21520 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
21530 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
21540 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
21550 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
21560 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21570 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  char*, u64);.voi
21580 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
21590 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
215a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
215b0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
215c0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
215d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
215e0 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
215f0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
21600 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
21610 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
21620 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
21630 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
21640 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
21650 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
21660 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
21670 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
21680 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
21690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
216a0 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
216b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
216c0 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
216d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
216e0 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
216f0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
21700 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
21710 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21720 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
21730 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
21740 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
21750 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
21760 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23  id (*)(void));.#
21770 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
21780 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
21790 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
217a0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
217b0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
217c0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
217d0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
217e0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
217f0 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
21800 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
21810 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
21820 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
21830 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
21840 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
21850 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
21860 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
21870 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
21880 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
21890 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
218a0 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
218b0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
218c0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
218d0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
218e0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
218f0 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
21900 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
21910 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
21920 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
21930 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
21940 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
21950 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
21960 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21970 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
21980 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
21990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
219a0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
219b0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
219c0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
219d0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
219e0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
219f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
21a00 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
21a10 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
21a20 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
21a30 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
21a40 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
21a50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
21a60 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
21a70 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
21a80 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
21a90 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
21aa0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
21ab0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
21ac0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
21ad0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
21ae0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
21af0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
21b00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
21b10 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
21b20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
21b30 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
21b40 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
21b50 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
21b60 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
21b70 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
21b80 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
21b90 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
21ba0 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
21bb0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
21bc0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
21bd0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
21be0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
21bf0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
21c00 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
21c10 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
21c20 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
21c30 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
21c40 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
21c50 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
21c60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
21c70 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
21c80 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
21c90 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
21ca0 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
21cb0 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
21cc0 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
21cd0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
21ce0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
21cf0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
21d00 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  oid);..#ifndef S
21d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
21d20 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
21d30 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
21d40 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
21d50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
21d60 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
21d70 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
21d80 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
21d90 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
21da0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
21db0 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
21dc0 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
21dd0 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
21de0 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
21df0 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
21e00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
21e10 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
21e20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
21e30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
21e40 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
21e50 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
21e60 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
21e70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21e80 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
21e90 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
21ea0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
21eb0 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
21ec0 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
21ed0 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
21ee0 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
21ef0 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
21f00 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
21f10 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
21f20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
21f30 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
21f40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
21f50 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
21f60 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
21f70 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
21f80 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
21f90 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
21fa0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
21fb0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
21fc0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
21fd0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
21fe0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
21ff0 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
22000 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
22010 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
22020 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
22030 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
22040 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
22050 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
22060 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
22070 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
22080 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
22090 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
220a0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
220b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
220c0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
220d0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
220e0 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
220f0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
22100 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22110 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
22120 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
22130 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
22140 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
22150 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
22160 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
22170 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
22180 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ect*, u8);.#endi
22190 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
221a0 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
221b0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
221c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
221d0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
221e0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
221f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
22200 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
22210 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
22220 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
22230 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
22240 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22250 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
22260 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22270 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
22280 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
22290 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
222a0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
222b0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
222c0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
222d0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
222e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
222f0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
22300 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
22310 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
22320 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
22330 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
22340 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
22350 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
22360 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
22370 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
22380 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
22390 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
223a0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
223b0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
223c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
223d0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
223e0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
223f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
22400 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
22410 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
22420 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
22430 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
22440 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
22450 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
22460 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
22470 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
22480 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
22490 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
224a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
224b0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
224c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
224d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
224e0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
224f0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
22500 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
22510 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
22520 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
22530 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22540 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
22550 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
22560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22570 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
22580 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
22590 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
225a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
225b0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
225c0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
225d0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
225e0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
225f0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
22600 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
22610 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
22620 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
22630 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
22640 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
22650 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22660 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
22670 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
22680 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
22690 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
226a0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
226b0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
226c0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
226d0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
226e0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
226f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22700 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
22710 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
22720 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
22730 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
22740 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22750 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
22760 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
22770 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
22780 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
22790 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
227a0 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
227b0 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
227c0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
227d0 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
227e0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
227f0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
22800 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a  lumn**);.Table *
22810 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
22820 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
22830 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
22840 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
22850 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
22860 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
22870 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
22880 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
22890 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
228a0 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
228b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
228c0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
228d0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
228e0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
228f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22900 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
22910 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
22920 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
22930 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
22940 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
22950 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
22960 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
22970 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22980 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
22990 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
229a0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
229b0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
229c0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  e(Parse*,Token*)
229d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
229e0 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
229f0 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
22a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22a10 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
22a20 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
22a30 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
22a40 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
22a50 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74  Token*,u8,Select
22a60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
22a70 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
22a80 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
22a90 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
22ac0 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
22ad0 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
22ae0 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
22af0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22b00 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
22b10 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
22b20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22b30 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
22b40 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  EST.# define sql
22b50 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
22b60 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
22b70 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
22b80 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
22b90 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
22ba0 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
22bb0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
22bc0 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
22bd0 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
22be0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
22bf0 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
22c00 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
22c10 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
22c20 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
22c30 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
22c40 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
22c50 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
22c60 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
22c70 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
22c80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
22c90 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
22ca0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22cb0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e  _BUILTIN_TEST.in
22cc0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
22cd0 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
22ce0 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
22cf0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
22d00 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
22d10 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
22d20 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
22d30 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
22d40 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
22d50 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
22d60 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
22d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
22d80 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
22d90 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
22da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
22db0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
22dc0 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
22dd0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
22de0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22df0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
22e00 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
22e10 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
22e20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22e30 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
22e40 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22e50 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
22e60 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
22e70 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
22e80 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
22e90 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
22ea0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
22eb0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
22ec0 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
22ed0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
22ee0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
22ef0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
22f00 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
22f10 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
22f20 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
22f30 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
22f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
22f50 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
22f60 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
22f70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22f80 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
22f90 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
22fa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22fb0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
22fc0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
22fd0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
22fe0 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
22ff0 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
23000 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
23010 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
23020 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23030 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
23040 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
23050 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
23060 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
23070 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
23080 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
23090 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
230a0 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
230b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
230c0 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
230d0 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
230e0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
230f0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
23100 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
23110 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
23120 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23130 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
23140 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
23150 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
23160 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
23170 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
23180 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
23190 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
231a0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
231b0 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
231c0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
231d0 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
231e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
231f0 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
23200 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
23210 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23240 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
23250 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
23260 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
23270 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
23280 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
23290 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
232a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
232b0 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
232c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
232d0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
232e0 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
232f0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
23300 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
23310 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
23320 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
23330 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
23340 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23350 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
23360 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
23370 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23380 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
23390 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
233a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
233b0 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
233c0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
233d0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
233e0 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
233f0 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
23400 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
23410 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
23420 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
23430 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
23440 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
23450 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
23480 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23490 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
234a0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
234b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
234c0 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
234d0 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
234e0 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
234f0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
23500 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
23510 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
23520 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
23550 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c  List*,u16,Expr*,
23560 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23570 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
23580 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
23590 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
235a0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
235b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
235c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
235d0 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
235e0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
235f0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
23600 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
23610 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
23620 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
23630 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
23640 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
23650 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
23660 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23670 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
23680 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
23690 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
236a0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
236b0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
236c0 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
236d0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
236e0 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
236f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
23700 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23710 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
23720 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
23730 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
23740 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
23750 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
23760 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
23770 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
23780 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
23790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
237a0 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
237b0 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57  *);.u64 sqlite3W
237c0 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
237d0 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
237e0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
237f0 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
23800 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23810 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
23820 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
23830 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
23840 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
23850 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23860 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
23870 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
23880 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
23890 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
238a0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
238b0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
238c0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
238d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
238e0 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
238f0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
23900 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
23910 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
23920 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
23930 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
23940 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23950 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
23960 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
23970 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
23980 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
23990 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
239a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
239b0 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
239c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
239d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
239e0 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
239f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
23a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23a10 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
23a20 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23a30 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
23a40 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23a50 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
23a60 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
23a70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23a80 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
23a90 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23aa0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
23ab0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
23ac0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23ad0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23ae0 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
23af0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23b00 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
23b10 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
23b20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23b30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23b40 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
23b50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
23b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23b70 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
23b80 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
23b90 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23ba0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
23bb0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23bd0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
23be0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
23bf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23c00 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
23c10 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
23c20 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
23c30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
23c40 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
23c50 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
23c60 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
23c70 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
23c80 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
23c90 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
23ca0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
23cb0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
23cc0 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
23cd0 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
23ce0 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
23cf0 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20  erByCol */.void 
23d00 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
23d10 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
23d20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23d30 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
23d40 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
23d50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
23d60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
23d70 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c  FalseDup(Parse*,
23d80 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
23d90 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
23da0 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
23db0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23dc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
23dd0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
23de0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
23df0 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
23e00 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
23e10 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
23e20 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
23e30 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
23e40 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
23e50 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
23e60 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
23e70 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
23e80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
23e90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
23ea0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
23eb0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
23ec0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
23ed0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23ee0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
23ef0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
23f00 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
23f10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
23f20 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
23f30 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
23f40 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
23f50 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
23f60 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
23f70 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
23f80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23f90 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
23fa0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
23fb0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
23fc0 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
23fd0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
23fe0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23ff0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
24000 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
24010 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24020 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
24030 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
24040 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
24050 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
24060 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
24070 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
24080 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24090 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
240a0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
240b0 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
240c0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
240d0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
240e0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
240f0 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
24100 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
24110 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
24120 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
24130 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
24140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
24150 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
24160 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
24170 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
24180 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
24190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
241a0 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
241b0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
241c0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
241d0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
241e0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
241f0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
24200 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
24210 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
24220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
24230 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
24240 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24250 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
24260 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
24270 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24280 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
24290 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
242a0 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
242b0 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
242c0 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
242d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
242e0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
242f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
24300 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
24310 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
24320 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
24330 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
24340 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
24350 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
24360 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
24370 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
24380 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
24390 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
243a0 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
243b0 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
243c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
243d0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
243e0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
243f0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
24400 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
24410 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
24420 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
24430 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a  RowDelete(Parse*
24440 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
24450 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
24460 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  ,u8,u8,u8);.void
24470 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
24480 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
24490 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
244a0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a  nt, int, int*);.
244b0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
244c0 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
244d0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
244e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
244f0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
24500 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
24510 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
24520 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
24530 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
24540 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
24550 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
24560 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
24570 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
24580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24590 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
245a0 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
245b0 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
245c0 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
245d0 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
245e0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
245f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
24600 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
24610 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
24620 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a  *, int, int, u8*
24630 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
24640 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
24650 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
24660 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
24670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
24680 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
24690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
246a0 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
246b0 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
246c0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
246d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
246e0 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
246f0 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
24700 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
24710 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
24720 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
24730 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
24740 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
24750 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24760 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
24770 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
24780 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
24790 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
247a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
247b0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
247c0 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
247d0 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
247e0 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
247f0 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
24800 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
24810 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
24820 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
24830 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
24840 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
24850 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
24860 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
24870 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
24880 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
24890 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
248a0 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
248b0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
248c0 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
248d0 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
248e0 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
248f0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
24900 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
24910 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
24920 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
24930 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
24940 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
24950 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
24960 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
24970 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
24980 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
24990 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
249a0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
249b0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
249c0 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
249d0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
249e0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
249f0 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
24a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24a10 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
24a20 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
24a30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
24a40 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
24a50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24a60 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
24a70 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
24a80 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
24a90 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
24aa0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
24ab0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24ac0 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
24ad0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
24ae0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
24af0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
24b00 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
24b10 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
24b30 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
24b40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
24b50 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
24b60 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
24b70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
24b80 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
24b90 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
24ba0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
24bb0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
24bc0 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
24bd0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
24be0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
24bf0 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
24c00 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
24c10 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
24c20 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
24c30 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
24c40 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
24c50 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
24c60 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
24c70 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
24c80 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
24c90 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
24ca0 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
24cd0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
24ce0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24cf0 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
24d00 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
24d10 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
24d20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
24d30 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
24d40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
24d50 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
24d60 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
24d70 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24d80 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
24d90 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
24da0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
24db0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
24dc0 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
24dd0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
24de0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
24df0 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
24e00 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
24e10 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
24e50 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
24e60 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
24e70 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
24e80 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
24e90 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
24ea0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
24eb0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
24ec0 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
24ed0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
24ee0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24ef0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
24f00 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
24f10 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24f20 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
24f30 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
24f40 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24f50 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
24f60 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
24f70 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
24f80 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
24f90 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
24fa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
24fb0 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
24fc0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
24fd0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
24fe0 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
24ff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
25000 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
25010 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
25020 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
25030 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
25040 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
25050 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
25060 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25070 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
25080 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
25090 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
250a0 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
250b0 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
250c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
250d0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
250e0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
250f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25100 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
25110 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
25120 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
25130 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
25140 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
25150 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
25160 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
25170 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
25180 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
25190 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
251a0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
251b0 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
251c0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
251d0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
251e0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
251f0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
25200 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
25210 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
25220 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
25230 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
25240 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
25250 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
25260 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
25270 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
25280 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
25290 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
252a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
252b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
252c0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
252d0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
252e0 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
252f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
25300 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
25310 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
25320 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
25330 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
25340 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
25350 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
25360 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
25370 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25380 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
25390 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
253a0 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
253b0 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
253c0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
253d0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
253e0 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
253f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
25400 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
25410 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
25420 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
25430 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
25440 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
25450 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
25460 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
25470 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25480 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
25490 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
254a0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
254b0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
254c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
254d0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
254e0 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
254f0 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
25500 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
25510 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
25520 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
25530 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
25540 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
25550 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
25560 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
25570 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
25580 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
25590 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
255a0 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
255b0 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
255c0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
255d0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
255e0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
255f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
25600 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
25610 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
25620 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
25630 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
25640 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
25650 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
25660 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
25670 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
25680 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
25690 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
256a0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
256b0 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
256c0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
256d0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
256e0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
256f0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25700 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
25710 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
25720 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
25730 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  if.u64 sqlite3Lo
25740 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
25750 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
25760 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
25770 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
25780 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
25790 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
257a0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
257b0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
257c0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
257d0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
257e0 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
257f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
25800 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
25810 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
25820 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
25830 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
25840 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
25850 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
25860 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
25870 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
25880 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25890 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
258a0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
258b0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
258c0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
258d0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
258e0 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
258f0 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
25900 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
25910 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
25920 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
25930 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
25940 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
25950 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
25960 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
25970 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
25980 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
25990 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
259a0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
259b0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
259c0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
259d0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
259e0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
259f0 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
25a00 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
25a10 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
25a20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
25a30 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
25a40 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
25a50 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
25a60 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
25a70 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
25a80 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
25a90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
25aa0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
25ab0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
25ac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
25ad0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
25ae0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
25af0 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
25b00 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
25b10 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
25b20 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
25b30 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
25b40 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
25b50 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
25b60 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
25b70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
25b80 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
25b90 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
25ba0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
25bb0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
25bc0 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
25bd0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
25be0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25bf0 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
25c00 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
25c10 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
25c20 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
25c30 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
25c40 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
25c50 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
25c60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
25c70 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
25c80 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
25c90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
25ca0 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
25cb0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
25cc0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
25cd0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25ce0 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
25cf0 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
25d00 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
25d10 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
25d20 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
25d30 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
25d40 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
25d50 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
25d60 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
25d70 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
25d80 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
25d90 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
25da0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
25db0 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
25dc0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
25dd0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
25de0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
25df0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
25e00 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
25e10 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
25e20 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
25e30 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
25e40 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
25e50 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e  const Token*, in
25e60 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
25e70 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
25e80 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
25e90 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
25ea0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
25eb0 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
25ec0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
25ed0 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
25ee0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
25ef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
25f00 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
25f10 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
25f20 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
25f30 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
25f40 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
25f50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
25f60 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
25f70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
25f80 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
25f90 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
25fa0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
25fb0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
25fc0 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
25fd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
25fe0 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
25ff0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
26000 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
26010 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
26020 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
26030 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
26040 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
26050 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
26060 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
26070 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
26080 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
26090 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
260a0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
260b0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
260c0 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
260d0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
260e0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
260f0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
26100 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20   *,u8, .        
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
26130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
26140 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
26150 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
26160 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
26170 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
26180 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
26190 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
261a0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
261b0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
261c0 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
261d0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
261e0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
261f0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
26200 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
26210 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
26220 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
26230 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
26240 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
26250 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
26260 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
26270 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
26280 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
26290 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
262a0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
262b0 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
262c0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
262d0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
262e0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
262f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
26300 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
26310 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
26320 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
26330 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
26340 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
26350 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
26360 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
26370 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
26380 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
26390 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
263a0 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
263b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
263c0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
263d0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
263e0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
263f0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
26400 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
26410 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
26420 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
26430 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
26440 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
26450 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
26460 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
26470 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
26480 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
26490 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
264a0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
264b0 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
264c0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
264d0 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
264e0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
264f0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
26500 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
26510 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
26520 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
26530 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
26540 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
26550 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
26560 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
26570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26580 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
26590 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
265a0 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
265b0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
265c0 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
265d0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
265e0 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
265f0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
26600 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
26610 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
26620 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
26630 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
26640 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
26650 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
26660 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
26670 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
26680 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
26690 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
266a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
266b0 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
266c0 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
266d0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
266e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
266f0 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
26700 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
26710 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
26720 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
26730 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
26740 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
26750 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
26760 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
26770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
26780 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
26790 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
267a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
267b0 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
267c0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
267d0 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
267e0 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
267f0 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
26800 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
26810 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
26820 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
26830 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
26840 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
26850 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
26860 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
26870 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
26880 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
26890 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
268a0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
268b0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
268c0 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
268d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
268e0 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
268f0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
26900 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
26910 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
26920 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
26930 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
26940 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
26950 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
26960 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
26970 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
26980 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
26990 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
269a0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
269b0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
269c0 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
269d0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
269e0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
269f0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
26a00 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
26a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
26a20 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
26a30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
26a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
26a50 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
26a60 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
26a70 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
26a80 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
26a90 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
26aa0 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
26ab0 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
26ac0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
26ad0 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
26ae0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
26af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
26b00 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
26b10 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
26b20 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
26b30 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
26b40 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
26b50 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
26b60 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
26b70 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26b80 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
26b90 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
26ba0 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
26bb0 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
26bc0 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
26bd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
26be0 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
26bf0 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
26c00 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
26c10 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
26c20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
26c30 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
26c40 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
26c50 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
26c60 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
26c70 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
26c80 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
26c90 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r.);.int sqlite3
26ca0 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
26cb0 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
26cc0 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
26cd0 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
26ce0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
26cf0 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
26d00 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
26d10 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
26d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26d30 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
26d40 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
26d50 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
26d60 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
26d70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
26d80 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
26d90 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
26da0 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c  dChar(StrAccum*,
26db0 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20  int,char);.char 
26dc0 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
26dd0 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
26de0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26df0 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
26e00 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
26e10 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
26e20 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
26e30 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
26e40 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
26e50 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
26e60 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
26e70 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
26e80 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
26e90 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
26ea0 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
26eb0 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
26ec0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
26ed0 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
26ee0 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
26ef0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
26f00 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
26f10 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
26f20 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
26f30 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
26f40 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
26f50 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
26f60 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
26f70 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
26f80 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
26f90 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
26fa0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
26fb0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
26fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26fd0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
26fe0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
26ff0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
27000 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
27010 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
27020 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
27030 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
27040 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
27050 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
27060 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
27070 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
27080 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
27090 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76  oid*(*)(u64));.v
270a0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
270b0 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
270c0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
270d0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
270e0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
270f0 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
27100 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
27110 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
27120 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
27130 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
27140 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
27150 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
27160 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
27170 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27180 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
27190 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
271a0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
271b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
271c0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
271d0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
271e0 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
271f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27200 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
27210 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
27220 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
27230 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
27240 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
27250 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27260 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
27270 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
27280 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
27290 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
272a0 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
272b0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
272c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
272d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
272e0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
272f0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
27300 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
27310 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
27320 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
27330 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
27340 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
27350 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
27360 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
27370 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
27380 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
27390 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
273a0 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
273b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
273c0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
273d0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
273e0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
273f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
27400 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
27410 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
27420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
27430 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
27440 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
27450 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
27460 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
27470 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
27480 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
27490 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
274a0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
274b0 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
274c0 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
274d0 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
274e0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
274f0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
27500 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
27510 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
27520 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
27530 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
27540 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
27550 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
27560 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
27570 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
27580 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
27590 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
275a0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
275b0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
275c0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
275d0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
275e0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
275f0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
27600 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
27610 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
27620 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
27630 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
27640 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
27650 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
27660 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
27670 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
27680 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
27690 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
276a0 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
276b0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
276c0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
276d0 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
276e0 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
276f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
27700 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
27710 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
27720 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
27730 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
27740 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
27750 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
27760 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
27770 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
27780 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
27790 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
277a0 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
277b0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
277c0 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
277d0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
277e0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
277f0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
27800 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
27810 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
27820 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
27830 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
27840 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
27850 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
27860 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
27870 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
27880 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
27890 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
278a0 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
278b0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
278c0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
278d0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
278e0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
278f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27900 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
27910 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
27920 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
27930 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
27940 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
27950 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
27960 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
27970 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
27980 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
27990 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
279a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
279b0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
279c0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
279d0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
279e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
279f0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
27a00 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
27a10 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
27a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27a30 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
27a40 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
27a50 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
27a60 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
27a70 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
27a80 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
27a90 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
27aa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
27ab0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
27ac0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
27ad0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
27ae0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
27af0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
27b00 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
27b10 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
27b20 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
27b30 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
27b40 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
27b50 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
27b60 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
27b70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
27b80 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
27b90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
27ba0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
27bb0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
27bc0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
27bd0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
27be0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
27bf0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
27c00 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
27c10 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
27c20 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
27c30 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
27c40 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
27c50 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
27c60 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
27c70 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
27c80 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
27c90 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
27ca0 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
27cb0 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
27cc0 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
27cd0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
27ce0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
27cf0 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
27d00 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
27d10 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
27d20 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
27d30 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
27d40 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
27d50 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
27d60 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
27d70 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
27d80 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
27d90 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
27da0 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
27db0 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
27dc0 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
27dd0 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
27de0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
27df0 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
27e00 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
27e10 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
27e20 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
27e30 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27e40 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
27e50 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
27e60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
27e70 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
27e80 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
27e90 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27ea0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
27eb0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27ec0 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
27ed0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
27ee0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
27ef0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
27f00 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
27f10 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
27f20 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
27f30 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
27f40 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
27f50 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
27f60 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
27f70 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
27f80 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
27f90 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
27fa0 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
27fb0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27fc0 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
27fd0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27fe0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
27ff0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
28000 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28010 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
28020 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
28030 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
28040 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
28050 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28060 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
28070 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  ,d)    0.#endif.
28080 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28090 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
280a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
280b0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
280c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
280d0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
280e0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
280f0 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
28100 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
28110 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28120 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
28130 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28140 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
28150 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
28160 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
28170 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
28180 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
28190 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
281a0 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
281b0 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
281c0 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
281d0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
281e0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
281f0 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
28200 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
28210 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
28220 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
28230 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
28240 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
28250 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
28260 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
28270 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
28280 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
28290 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
282a0 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
282b0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
282c0 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
282d0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
282e0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
282f0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
28300 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
28310 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
28320 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
28330 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
28340 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
28350 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
28360 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
28370 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
28380 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
28390 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
283a0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
283b0 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
283c0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
283d0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
283e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
283f0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
28400 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
28410 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
28420 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
28430 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
28440 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
28450 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
28460 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
28470 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
28480 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
28490 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
284a0 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
284b0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
284c0 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
284d0 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
284e0 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
284f0 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
28500 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
28510 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
28520 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
28530 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
28540 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28550 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
28560 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
28570 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
28580 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
28590 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
285a0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
285b0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
285c0 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
285d0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
285e0 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
285f0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
28600 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
28610 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
28620 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
28630 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
28640 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a  *, u32, int*);..
28650 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28660 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
28670 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
28680 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
28690 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
286a0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
286b0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
286c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
286d0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
286e0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
286f0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
28700 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
28710 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
28720 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
28730 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
28740 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
28750 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
28760 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
28770 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
28780 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28790 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
287a0 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
287b0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
287c0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
287d0 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
287e0 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
287f0 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
28800 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
28810 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
28820 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
28830 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
28840 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
28850 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
28860 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
28870 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
28880 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
28890 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
288a0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
288b0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
288c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
288d0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
288e0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
288f0 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
28900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
28910 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
28920 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
28930 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
28940 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
28950 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
28960 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
28970 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28980 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
28990 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
289a0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
289b0 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
289c0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
289d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
289e0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
289f0 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
28a00 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
28a10 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
28a20 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28a30 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
28a40 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
28a50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28a60 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
28a70 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
28a80 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
28a90 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
28aa0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
28ab0 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
28ac0 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
28ad0 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
28ae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
28af0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
28b00 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
28b10 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
28b20 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
28b30 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
28b40 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
28b50 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
28b60 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
28b70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
28b80 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23   messages. .*/.#
28b90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28ba0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
28bb0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
28bc0 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
28bd0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
28be0 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
28bf0 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
28c00 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
28c10 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
28c20 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
28c30 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
28c40 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
28c50 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
28c60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
28c70 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
28c80 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
28c90 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
28ca0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
28cb0 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
28cc0 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
28cd0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
28ce0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
28cf0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
28d00 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
28d10 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
28d20 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
28d30 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
28d40 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
28d50 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
28d60 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
28d70 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
28d80 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
28d90 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
28da0 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
28db0 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
28dc0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
28dd0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
28de0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
28df0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
28e00 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
28e10 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
28e20 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
28e30 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
28e40 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
28e50 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
28e60 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
28e70 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
28e80 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
28e90 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
28ea0 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
28eb0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
28ec0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
28ed0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
28ee0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
28ef0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
28f00 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
28f10 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
28f20 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
28f30 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
28f40 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
28f50 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
28f60 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
28f70 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28f80 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
28f90 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
28fa0 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
28fb0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
28fc0 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
28fd0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
28fe0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
28ff0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
29000 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
29010 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
29020 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
29030 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
29040 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
29050 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
29060 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
29070 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
29080 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
29090 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
290a0 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
290b0 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
290c0 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
290d0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
290e0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
290f0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
29100 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
29110 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
29120 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
29130 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
29140 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
29150 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
29160 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
29170 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
29180 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
29190 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
291a0 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
291b0 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
291c0 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
291d0 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
291e0 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
291f0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
29200 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
29210 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
29220 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
29230 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
29240 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
29250 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
29260 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
29270 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
29280 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
29290 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
292a0 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
292b0 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
292c0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
292d0 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
292e0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
292f0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
29300 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
29310 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
29320 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
29330 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
29340 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
29350 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
29360 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
29370 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
29380 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
29390 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
293a0 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
293b0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
293c0 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
293d0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
293e0 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
293f0 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
29400 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
29410 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
29420 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
29430 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
29440 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
29450 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
29460 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
29470 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
29480 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
29490 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
294a0 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
294b0 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
294c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
294d0 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
294e0 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
294f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
29500 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
29510 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
29520 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
29530 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
29540 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
29550 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
29560 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
29570 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
29580 0a                                               .