/ Hex Artifact Content
Login

Artifact 683b48027374e20bea20e36180984be07bb03031:


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 0a 2f 2a 0a 2a  g order */../*.*
e810: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
e820: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
e830: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
e840: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
e850: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
e860: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e870: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
e880: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
e890: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
e8a0: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
e8b0: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
e8c0: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
e8d0: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
e8e0: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
e8f0: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
e900: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
e910: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
e920: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
e930: 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79  h 'A'.  That way
e940: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
e950: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
e960: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
e970: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
e980: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
e990: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
e9a0: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
e9b0: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
e9c0: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
e9d0: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
e9e0: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
e9f0: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
ea00: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
ea10: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
ea20: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
ea30: 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42  ison.  And the B
ea40: 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73  LOB type is firs
ea50: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t..*/.#define SQ
ea60: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20  LITE_AFF_BLOB   
ea70: 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51    'A'.#define SQ
ea80: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
ea90: 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51    'B'.#define SQ
eaa0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
eab0: 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51    'C'.#define SQ
eac0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ead0: 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51    'D'.#define SQ
eae0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
eaf0: 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73    'E'..#define s
eb00: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
eb10: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
eb20: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
eb30: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
eb40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
eb50: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
eb60: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
eb70: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
eb80: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20  affinity value. 
eb90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
eba0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
ebb0: 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
ebc0: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
ebd0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
ebe0: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
ebf0: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
ec00: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
ec10: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
ec20: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
ec30: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
ec40: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
ec50: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
ec60: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
ec70: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
ec80: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
ec90: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
eca0: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
ecb0: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
ecc0: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
ecd0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
ece0: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
ecf0: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
ed00: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
ed10: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
ed20: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ed30: 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
ed40: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
ed50: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
ed60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ed70: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
ed80: 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
ed90: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
eda0: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
edb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
edc0: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
edd0: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
ede0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
edf0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
ee00: 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
ee10: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
ee20: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
ee30: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
ee40: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
ee50: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
ee60: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
ee70: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
ee80: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ee90: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
eea0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
eeb0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
eec0: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
eed0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
eee0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
eef0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
ef00: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
ef10: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
ef20: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
ef30: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
ef40: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
ef50: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
ef60: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
ef70: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
ef80: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
ef90: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
efa0: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
efb0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
efc0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
efd0: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
efe0: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
eff0: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
f000: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
f010: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
f020: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
f030: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
f040: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
f050: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
f060: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
f070: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
f080: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
f090: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
f0a0: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
f0b0: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
f0c0: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
f0d0: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
f0e0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
f0f0: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
f100: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
f110: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
f120: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
f130: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
f140: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
f150: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
f160: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
f170: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
f180: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
f190: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
f1a0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
f1b0: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
f1c0: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
f1d0: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
f1e0: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
f1f0: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
f200: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
f210: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
f220: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
f230: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f240: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
f250: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
f260: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
f270: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
f280: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
f290: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
f2a0: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
f2b0: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
f2c0: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
f2d0: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
f2e0: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
f2f0: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
f300: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
f310: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
f320: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
f330: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
f340: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
f350: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
f360: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
f370: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
f380: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
f390: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
f3a0: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
f3b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
f3c0: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
f3d0: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
f3e0: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
f3f0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f400: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
f410: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
f420: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
f430: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
f440: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
f450: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
f460: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
f470: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
f480: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
f490: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
f4a0: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
f4b0: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
f4c0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f4d0: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
f4e0: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
f4f0: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
f500: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
f510: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
f520: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
f530: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
f540: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
f550: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
f560: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
f570: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
f580: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
f590: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
f5a0: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
f5b0: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
f5c0: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
f5d0: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
f5e0: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
f5f0: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
f600: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
f610: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
f620: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
f630: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
f640: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
f650: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
f660: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
f670: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
f680: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
f690: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
f6a0: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
f6b0: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
f6c0: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
f6d0: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
f6e0: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
f6f0: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
f700: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
f710: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
f720: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
f730: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
f740: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
f750: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
f760: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
f770: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
f780: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
f790: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
f7a0: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
f7b0: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
f7c0: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
f7d0: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
f7e0: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
f7f0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
f800: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
f810: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
f820: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
f830: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
f840: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
f850: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
f860: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
f870: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
f880: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
f890: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
f8a0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
f8d0: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
f8e0: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
f8f0: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
f900: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
f910: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
f920: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
f930: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
f940: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
f950: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
f960: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
f970: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
f980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
f990: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
f9a0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
f9b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
f9c0: 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
f9d0: 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
f9e0: 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
f9f0: 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
fa00: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
fa10: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
fa20: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
fa30: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
fa40: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
fa50: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
fa60: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
fa70: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
fa80: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
fa90: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
faa0: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
fab0: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
fac0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
fad0: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
fae0: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
faf0: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
fb00: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
fb10: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
fb20: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
fb30: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
fb40: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
fb50: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
fb60: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
fb70: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
fb80: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
fb90: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
fba0: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
fbb0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
fbc0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
fbd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
fbe0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
fbf0: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
fc00: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
fc10: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
fc20: 64 69 66 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20  dif.  int tnum; 
fc30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
fc40: 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
fc50: 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
fc60: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
fc70: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
fc80: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
fc90: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
fca0: 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
fcb0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
fcc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
fcd0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
fce0: 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
fcf0: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
fd00: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
fd10: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
fd20: 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
fd30: 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
fd40: 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
fd50: 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
fd60: 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
fd70: 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
fd80: 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
fd90: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
fda0: 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
fdb0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
fdc0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
fdd0: 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
fde0: 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
fdf0: 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
fe00: 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
fe10: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
fe20: 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  if.  u8 tabFlags
fe30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
fe40: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
fe50: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
fe60: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
fe70: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
fe80: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
fe90: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
fea0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
feb0: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
fec0: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
fed0: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
fee0: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
fef0: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
ff00: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
ff10: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
ff20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
ff30: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
ff40: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
ff50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
ff60: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
ff70: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
ff80: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
ff90: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
ffa0: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
ffb0: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
ffc0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
ffd0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
ffe0: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
fff0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
10000 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
10010 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
10020 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
10030 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
10040 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
10050 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
10060 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
10070 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
10080 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
10090 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
100a0 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
100b0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
100c0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
100d0 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
100e0 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
100f0 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
10100 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
10110 73 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  s that have hidd
10120 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
10130 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
10140 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
10150 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
10160 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
10170 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
10180 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
10190 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
101a0 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
101b0 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
101c0 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
101d0 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
101e0 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
101f0 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
10200 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
10210 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
10220 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
10230 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
10240 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
10250 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
10260 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
10270 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
10280 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
10290 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
102a0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
102b0 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
102c0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
102d0 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
102e0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61     0x04    /* Ta
102f0 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
10300 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
10310 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
10320 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49  t   0x08    /* I
10330 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
10340 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d  ey is autoincrem
10350 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ent */.#define T
10360 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20  F_Virtual       
10370 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20    0x10    /* Is 
10380 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
10390 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69  */.#define TF_Wi
103a0 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78  thoutRowid    0x
103b0 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
103c0 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
103d0 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
103e0 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
103f0 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20 20  leRowid  0x40   
10400 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
10410 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
10420 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
10430 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
10440 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d   0x80    /* Out-
10450 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
10460 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a  columns */.../*.
10470 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
10480 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
10490 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
104a0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
104b0 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
104c0 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
104d0 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
104e0 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
104f0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
10500 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
10510 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
10520 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
10530 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
10540 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
10550 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
10560 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
10570 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
10580 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
10590 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
105a0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
105b0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
105c0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
105d0 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
105e0 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
105f0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
10600 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
10610 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
10620 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
10630 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
10640 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
10650 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
10660 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23  houtRowid)==0).#
10670 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f  define VisibleRo
10680 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61  wid(X) (((X)->ta
10690 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69  bFlags & TF_NoVi
106a0 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a  sibleRowid)==0).
106b0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
106c0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
106d0 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
106e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
106f0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
10700 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
10710 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
10720 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
10730 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
10740 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
10750 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
10760 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10770 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
10780 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
10790 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
107a0 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
107b0 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
107c0 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
107d0 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
107e0 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
107f0 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
10800 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
10810 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
10820 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
10830 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
10840 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
10850 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
10860 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
10870 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
10880 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
10890 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
108a0 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
108b0 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
108c0 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
108d0 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
108e0 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
108f0 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
10900 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
10910 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
10920 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
10930 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
10940 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
10950 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10960 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
10970 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
10980 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
10990 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
109a0 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
109b0 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
109c0 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
109d0 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
109e0 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
109f0 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
10a00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
10a10 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
10a20 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
10a30 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
10a40 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
10a50 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
10a60 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
10a70 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
10a80 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
10a90 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
10aa0 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
10ab0 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
10ac0 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
10ad0 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
10ae0 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
10af0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
10b00 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10b10 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
10b20 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
10b30 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
10b40 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
10b50 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
10b60 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
10b70 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
10b80 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
10b90 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
10ba0 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
10bb0 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
10bc0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10bd0 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
10be0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
10bf0 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
10c00 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
10c10 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
10c20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
10c30 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
10c40 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
10c50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10c60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
10c70 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
10c80 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
10c90 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
10ca0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
10cb0 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
10cc0 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
10cd0 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
10ce0 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
10cf0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
10d00 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
10d10 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
10d20 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
10d30 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
10d40 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
10d50 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
10d60 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
10d70 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
10d80 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
10d90 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
10da0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
10db0 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
10dc0 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
10dd0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
10de0 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
10df0 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
10e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10e10 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
10e20 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
10e30 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
10e40 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
10e50 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
10e60 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
10e70 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
10e80 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
10e90 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
10ea0 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
10eb0 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
10ec0 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
10ed0 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
10ee0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
10ef0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
10f00 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
10f10 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
10f20 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
10f30 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
10f40 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
10f50 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
10f60 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
10f70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10f80 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
10f90 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
10fa0 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
10fb0 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
10fc0 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
10fd0 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
10fe0 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
10ff0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
11000 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
11010 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
11020 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
11030 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
11040 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
11050 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
11060 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
11070 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
11080 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
11090 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
110a0 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
110b0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
110c0 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
110d0 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
110e0 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
110f0 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
11100 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
11110 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
11120 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
11130 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
11140 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
11150 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
11160 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
11170 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
11180 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
11190 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
111a0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
111b0 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
111c0 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
111d0 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
111e0 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
111f0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
11200 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
11210 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
11220 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
11230 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
11240 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
11250 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
11260 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
11270 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
11280 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
11290 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
112a0 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
112b0 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
112c0 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
112d0 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
112e0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
112f0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
11300 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
11310 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
11320 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
11330 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
11340 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
11350 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
11360 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
11370 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
11380 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
11390 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
113a0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
113b0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
113c0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
113d0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
113e0 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
113f0 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
11400 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
11410 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
11420 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
11430 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
11440 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
11450 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
11460 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
11470 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
11480 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
11490 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
114a0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
114b0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
114c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
114d0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
114e0 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
114f0 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
11500 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
11510 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
11520 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
11530 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
11540 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
11550 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
11560 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
11570 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
11580 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
11590 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
115a0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
115b0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
115c0 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
115d0 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
115e0 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
115f0 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
11600 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
11610 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
11620 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
11630 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
11640 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
11650 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
11660 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
11670 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
11680 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
11690 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
116a0 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
116b0 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
116c0 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
116d0 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
116e0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
116f0 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
11700 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11710 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11720 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
11730 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
11740 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
11750 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
11760 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
11770 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
11780 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
11790 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
117a0 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
117b0 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
117c0 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
117d0 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
117e0 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
117f0 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
11800 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
11810 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
11820 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
11830 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
11840 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
11850 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
11860 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
11870 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11880 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
11890 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
118a0 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
118b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
118c0 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
118d0 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
118e0 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
118f0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
11900 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11910 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
11920 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
11930 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20  .  u16 nXField; 
11940 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11950 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f   of columns beyo
11960 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d  nd the key colum
11970 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ns */.  sqlite3 
11980 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
11990 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
119a0 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
119b0 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
119c0 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
119d0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
119e0 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
119f0 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
11a00 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
11a10 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
11a20 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
11a30 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
11a40 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
11a50 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
11a60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11a70 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
11a80 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
11a90 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11aa0 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
11ab0 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
11ac0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
11ad0 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
11ae0 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
11af0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
11b00 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
11b10 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
11b20 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
11b30 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
11b40 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
11b50 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
11b60 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
11b70 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
11b80 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
11b90 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
11ba0 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
11bb0 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
11bc0 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
11bd0 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
11be0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
11bf0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
11c00 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
11c10 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
11c20 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
11c30 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
11c40 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
11c50 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  lds..**.** The r
11c60 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20  1 and r2 member 
11c70 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
11c80 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f  ly used by the o
11c90 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69  ptimized compari
11ca0 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  son.** functions
11cb0 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
11cc0 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65  reInt() and vdbe
11cd0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72  RecordCompareStr
11ce0 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74  ing()..*/.struct
11cf0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
11d00 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
11d10 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
11d20 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
11d30 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
11d40 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
11d50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11d60 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
11d70 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
11d80 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
11d90 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
11da0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
11db0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
11dc0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
11dd0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
11de0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
11df0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
11e00 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65  r NOMEM) */.  Me
11e10 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
11e20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
11e30 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20   int r1;        
11e40 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
11e50 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
11e60 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20  > rhs) */.  int 
11e70 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
11e80 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11e90 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
11ea0 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  ) */.};.../*.** 
11eb0 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
11ec0 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11ed0 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
11ee0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11ef0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11f00 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
11f10 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
11f20 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
11f30 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
11f40 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
11f50 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
11f60 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
11f70 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
11f80 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
11f90 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
11fa0 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
11fb0 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
11fc0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
11fd0 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
11fe0 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
11ff0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
12000 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
12010 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
12020 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
12030 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
12040 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
12050 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
12060 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
12070 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
12080 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
12090 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
120a0 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
120b0 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
120c0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
120d0 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
120e0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
120f0 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
12100 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
12110 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
12120 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
12130 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
12140 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12150 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
12160 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
12170 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
12180 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
12190 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
121a0 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
121b0 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
121c0 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
121d0 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
121e0 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
121f0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12200 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
12210 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
12220 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
12230 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
12240 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
12250 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
12260 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
12270 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
12280 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
12290 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
122a0 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
122b0 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
122c0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
122d0 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
122e0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
122f0 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
12300 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
12310 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
12320 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
12330 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
12340 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  * element..**.**
12350 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   While parsing a
12360 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72   CREATE TABLE or
12370 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
12380 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72  atement in order
12390 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20   to.** generate 
123a0 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70  VDBE code (as op
123b0 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67  posed to parsing
123c0 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61   one read from a
123d0 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  n sqlite_master.
123e0 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74  ** table as part
123f0 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65   of parsing an e
12400 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
12410 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69   schema), transi
12420 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a  ent instances.**
12430 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12440 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  re may be create
12450 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
12460 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76  the Index.tnum v
12470 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73  ariable is.** us
12480 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
12490 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42  address of a VDB
124a0 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e  E instruction, n
124b0 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61  ot a database pa
124c0 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74  ge.** number (it
124d0 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61   cannot - the da
124e0 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e  tabase page is n
124f0 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74  ot allocated unt
12500 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70  il the VDBE.** p
12510 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74  rogram is execut
12520 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74  ed). See convert
12530 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61  ToWithoutRowidTa
12540 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c  ble() for detail
12550 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  s..*/.struct Ind
12560 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
12570 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
12580 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
12590 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
125a0 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
125b0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
125c0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
125d0 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
125e0 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
125f0 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
12600 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
12610 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
12620 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
12630 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
12640 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
12650 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
12660 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
12670 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
12680 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
12690 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
126a0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
126b0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
126c0 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
126d0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
126e0 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
126f0 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
12700 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
12710 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
12720 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
12730 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
12740 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
12750 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
12760 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
12770 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
12780 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
12790 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
127a0 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
127b0 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
127c0 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
127d0 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
127e0 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
127f0 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
12800 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
12810 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
12820 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20  ndices */.  int 
12830 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
12840 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
12850 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
12860 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
12870 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
12880 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
12890 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
128a0 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
128b0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
128c0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
128d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
128e0 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
128f0 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
12900 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12910 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12920 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
12930 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
12940 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
12950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
12960 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
12970 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
12980 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
12990 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
129a0 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
129b0 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
129c0 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
129d0 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
129e0 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
129f0 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
12a00 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
12a10 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
12a20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
12a30 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
12a40 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
12a50 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
12a60 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
12a70 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
12a80 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
12a90 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
12aa0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
12ab0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
12ac0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
12ad0 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
12ae0 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
12af0 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
12b00 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
12b10 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
12b20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
12b30 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
12b40 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
12b50 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
12b60 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
12b70 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
12b80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12b90 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
12ba0 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
12bb0 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
12bc0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
12bd0 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
12be0 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
12bf0 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
12c00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
12c10 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
12c20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
12c30 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
12c40 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
12c50 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
12c60 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
12c70 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
12c80 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
12c90 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
12ca0 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
12cb0 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
12cc0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
12cd0 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
12ce0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12cf0 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
12d00 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
12d10 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
12d20 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
12d30 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
12d40 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
12d50 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
12d60 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
12d70 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
12d80 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
12d90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
12da0 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
12db0 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
12dc0 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
12dd0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
12de0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
12df0 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
12e00 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
12e10 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
12e20 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
12e30 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
12e40 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
12e50 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
12e60 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
12e70 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
12e80 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
12e90 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
12ea0 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
12eb0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
12ec0 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
12ed0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
12ee0 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
12ef0 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
12f00 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a  !=OE_None)../*.*
12f10 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
12f20 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
12f30 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
12f40 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
12f50 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
12f60 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
12f70 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
12f80 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
12f90 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
12fa0 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
12fb0 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
12fc0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
12fd0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
12fe0 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
12ff0 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
13000 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
13010 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
13020 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
13030 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
13040 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
13050 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13060 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
13070 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
13080 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
13090 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
130a0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
130b0 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
130c0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
130d0 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
130e0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
130f0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13100 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
13110 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
13120 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
13130 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
13140 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
13150 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
13160 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
13170 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
13180 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
13190 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
131a0 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
131b0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
131c0 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
131d0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
131e0 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
131f0 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
13200 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
13210 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
13220 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
13230 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
13240 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
13250 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
13260 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
13270 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
13280 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
13290 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
132a0 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
132b0 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
132c0 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
132d0 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
132e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
132f0 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
13300 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
13310 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
13320 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
13330 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
13340 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
13350 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
13360 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
13370 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
13380 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
13390 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
133a0 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
133b0 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
133c0 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
133d0 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
133e0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
133f0 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
13400 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
13410 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
13420 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
13430 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
13440 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
13450 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
13460 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
13470 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
13480 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
13490 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
134a0 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
134b0 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
134c0 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
134d0 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
134e0 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
134f0 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
13500 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
13510 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
13520 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
13530 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
13540 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
13550 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
13560 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
13570 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
13580 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
13590 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
135a0 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
135b0 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
135e0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
135f0 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
13600 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
13610 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
13620 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
13630 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
13640 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
13650 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
13680 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
13690 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
136a0 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
136b0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
136c0 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
136d0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
136e0 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
136f0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
13700 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
13710 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
13720 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
13730 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13740 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
13750 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
13760 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
13770 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
13780 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
13790 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
137a0 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
137b0 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
137c0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
137d0 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
137e0 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
137f0 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
13800 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
13810 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
13820 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
13830 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
13840 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
13850 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
13860 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
13870 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
13880 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
13890 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
138a0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
138b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
138c0 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
138d0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
138e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
138f0 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
13900 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
13910 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
13920 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
13930 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
13940 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
13950 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
13960 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
13970 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
13980 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
13990 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
139a0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
139b0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
139c0 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
139d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
139e0 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
139f0 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
13a00 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
13a10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13a20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
13a30 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
13a40 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
13a70 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
13a80 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
13a90 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
13ac0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
13ad0 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
13ae0 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
13af0 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
13b00 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
13b10 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
13b20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
13b30 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
13b40 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
13b50 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
13b60 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
13b70 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
13b80 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
13b90 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
13ba0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
13bb0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
13bc0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
13bd0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
13be0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
13bf0 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
13c00 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
13c10 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
13c20 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
13c30 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
13c40 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
13c50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13c60 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
13c70 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
13c80 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
13c90 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
13ca0 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
13cb0 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
13cc0 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
13cd0 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
13ce0 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
13cf0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
13d00 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
13d10 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
13d20 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
13d30 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
13d40 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
13d50 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
13d60 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
13d70 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
13d80 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
13d90 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
13da0 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
13db0 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
13dc0 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
13dd0 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
13de0 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
13df0 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
13e00 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
13e10 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
13e20 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
13e30 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
13e40 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
13e50 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
13e60 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
13e70 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
13e80 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
13e90 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
13ea0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
13eb0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
13ec0 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
13ed0 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
13ee0 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
13ef0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
13f00 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
13f10 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
13f20 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
13f30 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
13f40 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13f50 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
13f60 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
13f70 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
13f80 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
13f90 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
13fa0 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
13fb0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
13fc0 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
13fd0 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
13fe0 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
13ff0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
14000 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
14010 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
14020 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
14030 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
14040 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
14050 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
14060 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
14070 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
14080 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
14090 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
140a0 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
140b0 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
140c0 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54  K_BLOB, .** or T
140d0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
140e0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
140f0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
14100 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
14110 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
14120 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
14130 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
14140 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
14150 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
14160 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
14170 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
14180 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14190 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
141a0 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
141b0 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
141c0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
141d0 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
141e0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
141f0 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
14200 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
14210 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
14220 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
14230 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
14240 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
14250 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
14260 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
14270 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
14280 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
14290 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
142a0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
142b0 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
142c0 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
142d0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
142e0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
142f0 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
14300 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
14310 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
14320 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
14330 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
14340 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
14350 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
14360 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
14370 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
14380 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
14390 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
143a0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
143b0 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
143c0 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
143d0 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
143e0 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c  pList is .** val
143f0 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
14400 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
14410 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
14420 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
14430 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
14440 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
14450 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
14460 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
14470 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
14480 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
14490 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
144a0 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
144b0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
144c0 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
144d0 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
144e0 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
144f0 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
14500 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
14510 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
14520 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
14530 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
14540 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
14550 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
14560 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
14570 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
14580 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
14590 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
145a0 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
145b0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
145c0 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
145d0 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
145e0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
145f0 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
14600 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
14610 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
14620 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  k .** character 
14630 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
14640 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
14650 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
14660 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  lds the index .*
14670 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
14680 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
14690 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
146a0 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
146b0 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
146c0 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
146d0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
146e0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
146f0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
14700 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
14710 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
14720 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
14730 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
14740 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
14750 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
14760 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
14770 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
14780 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
14790 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
147a0 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
147b0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
147c0 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
147d0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
147e0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
147f0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
14800 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
14810 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
14820 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
14830 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
14840 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
14850 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
14860 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
14870 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
14880 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
14890 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
148a0 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
148b0 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
148c0 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
148d0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
148e0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
148f0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
14900 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
14910 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
14920 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
14930 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
14940 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
14950 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
14960 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
14970 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
14980 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
14990 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
149a0 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
149b0 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
149c0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
149d0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
149e0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
149f0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
14a00 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
14a10 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
14a20 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
14a30 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
14a40 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
14a50 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
14a60 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
14a70 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
14a80 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
14a90 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
14aa0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
14ab0 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
14ac0 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
14ad0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
14ae0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
14af0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
14b00 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
14b10 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
14b20 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
14b30 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
14b40 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
14b50 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
14b60 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
14b70 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
14b80 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
14b90 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
14ba0 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
14bb0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
14bc0 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
14bd0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
14be0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
14bf0 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
14c00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
14c10 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
14c20 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
14c30 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
14c40 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
14c50 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
14c60 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
14c70 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
14c80 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
14c90 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
14ca0 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
14cb0 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
14cc0 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
14cd0 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
14ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
14cf0 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
14d00 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
14d10 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
14d20 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14d30 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
14d40 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
14d50 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
14d60 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
14d70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
14d80 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
14d90 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
14da0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
14db0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
14dc0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
14dd0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
14de0 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a  unction. .  ****
14df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14e30 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
14e40 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14e50 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
14e60 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
14e70 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
14e80 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
14e90 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
14ea0 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
14eb0 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
14ec0 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
14ed0 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
14ee0 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
14ef0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
14f00 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
14f10 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
14f20 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
14f30 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
14f40 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
14f50 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
14f60 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
14f70 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
14f80 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
14f90 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
14fa0 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
14fb0 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
14fc0 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
14fd0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
14fe0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
14ff0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
15000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15040 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
15050 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
15060 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
15070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
15080 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
15090 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
150a0 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
150b0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
150c0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
150d0 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
150e0 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
150f0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
15120 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
15130 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15150 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
15160 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
15190 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
151a0 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
151b0 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  hood */.  ynVar 
151c0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
151d0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
151e0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
151f0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
15220 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
15230 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
15240 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
15250 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
15260 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
15270 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
15280 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
15290 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
152a0 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
152b0 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
152c0 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
152d0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
152e0 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
152f0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
15300 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
15310 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
15320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15330 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
15340 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
15350 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
15360 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15380 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
15390 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
153a0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
153b0 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
153c0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
153d0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
153e0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
153f0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
15400 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
15410 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
15420 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a  ressions. */.};.
15430 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
15440 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
15450 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
15460 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
15470 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
15480 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
15490 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
154a0 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
154b0 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
154c0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
154d0 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
154e0 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
154f0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
15500 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15510 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
15520 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
15530 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
15540 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
15550 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
15560 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
15570 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
15580 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
15590 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
155a0 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
155b0 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
155c0 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
155d0 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
155e0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
155f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
15600 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
15610 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
15620 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
15630 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
15640 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
15650 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
15660 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
15670 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
15680 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
15690 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
156a0 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
156b0 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
156c0 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
156d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
156e0 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
156f0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
15700 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
15710 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
15720 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
15730 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
15740 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
15750 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
15760 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
15770 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
15780 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
15790 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
157a0 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
157b0 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
157c0 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
157d0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
157e0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
157f0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
15800 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
15810 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
15820 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
15830 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
15840 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
15850 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
15860 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
15870 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
15880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
15890 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
158a0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
158b0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
158c0 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
158d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
158e0 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
158f0 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
15900 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
15910 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
15920 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
15930 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
15940 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
15950 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
15960 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
15970 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
15980 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
15990 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
159a0 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
159b0 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
159c0 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
159d0 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
159e0 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
159f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
15a00 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
15a10 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 53  0 /* Node is a S
15a20 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
15a30 41 4e 54 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ANT function */.
15a40 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
15a50 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
15a60 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
15a70 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
15a80 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15a90 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
15aa0 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
15ab0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
15ac0 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
15ad0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e  */../*.** Combin
15ae0 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72  ations of two or
15af0 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73   more EP_* flags
15b00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
15b10 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
15b20 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
15b30 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74  ) /* Propagate t
15b40 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65  hese bits up tre
15b50 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  e */../*.** Thes
15b60 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
15b70 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
15b80 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
15b90 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72   in the .** Expr
15ba0 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
15bb0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
15bc0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15bd0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
15be0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
15bf0 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
15c00 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
15c10 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
15c20 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
15c30 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15c40 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15c50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
15c60 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
15c70 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
15c80 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
15c90 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
15ca0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
15cb0 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
15cc0 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
15cd0 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
15ce0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
15cf0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
15d00 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
15d10 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
15d20 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
15d30 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
15d40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
15d50 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
15d60 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
15d70 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
15d80 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
15d90 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
15da0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
15db0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
15dc0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
15dd0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
15de0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
15df0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
15e00 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
15e10 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
15e20 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
15e30 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
15e40 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
15e50 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
15e60 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
15e70 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
15e80 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
15e90 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
15ea0 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
15eb0 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
15ec0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
15ed0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
15ee0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
15ef0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
15f00 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
15f10 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
15f20 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
15f30 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
15f40 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
15f50 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
15f60 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
15f70 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
15f80 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
15f90 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
15fa0 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
15fb0 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
15fc0 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
15fd0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
15fe0 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
15ff0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
16000 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
16010 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
16020 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
16030 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
16040 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
16050 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
16060 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
16070 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
16080 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
16090 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
160a0 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
160b0 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
160c0 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
160d0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
160e0 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
160f0 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
16100 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
16110 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
16120 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
16130 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
16140 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
16150 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
16160 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
16170 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
16180 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
16190 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
161a0 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
161b0 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
161c0 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
161d0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
161e0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
161f0 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
16200 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
16210 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
16220 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
16230 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
16240 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
16250 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
16260 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
16270 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
16280 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
16290 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
162a0 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
162b0 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
162c0 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
162d0 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
162e0 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
162f0 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
16300 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
16310 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
16320 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
16330 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
16340 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
16350 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
16360 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
16370 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
16380 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
16390 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
163a0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
163b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
163c0 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
163d0 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
163e0 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
163f0 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
16400 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
16410 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
16420 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
16430 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
16440 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
16450 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
16460 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
16470 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
16480 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
16490 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
164a0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
164b0 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
164c0 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
164d0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
164e0 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
164f0 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
16500 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
16510 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
16520 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
16530 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
16540 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
16550 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
16560 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
16570 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
16580 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
16590 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
165a0 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
165b0 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
165c0 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
165d0 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
165e0 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
165f0 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
16600 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
16610 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
16620 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
16630 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
16640 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
16650 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
16660 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
16670 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
16680 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
16690 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
166a0 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
166b0 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
166c0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
166d0 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
166e0 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
166f0 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16710 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
16720 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
16730 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
16740 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
16750 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
16760 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
16770 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
16780 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
16790 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
167a0 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
167b0 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
167c0 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
167d0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
167e0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
167f0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
16800 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
16810 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
16820 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
16830 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
16840 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
16850 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
16860 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
16870 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
16880 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
16890 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
168a0 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
168b0 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
168c0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
168d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
168e0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
168f0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
16900 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
16910 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
16920 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
16930 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
16940 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
16950 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
16960 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
16970 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
16980 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
16990 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
169a0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
169b0 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
169c0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
169d0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
169e0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
169f0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
16a00 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
16a10 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
16a20 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
16a30 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
16a40 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
16a50 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
16a60 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
16a70 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
16a80 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
16a90 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
16aa0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
16ab0 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
16ac0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
16ad0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
16ae0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
16af0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
16b00 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
16b10 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
16b20 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
16b30 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
16b40 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
16b50 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
16b60 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
16b70 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
16b80 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
16b90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16ba0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
16bb0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
16bc0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
16bd0 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
16be0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
16bf0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
16c00 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
16c10 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
16c20 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
16c30 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
16c40 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
16c50 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
16c60 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
16c70 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
16c80 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
16c90 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
16ca0 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
16cb0 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
16cc0 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
16cd0 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
16ce0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
16cf0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
16d00 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
16d10 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
16d20 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
16d30 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
16d40 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
16d50 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
16d60 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
16d70 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
16d80 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
16d90 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
16da0 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
16db0 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
16dc0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
16dd0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
16de0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
16df0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
16e00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
16e10 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
16e20 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
16e30 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
16e40 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
16e50 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
16e60 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
16e70 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
16e80 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
16e90 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
16ea0 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
16eb0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
16ec0 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
16ed0 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
16ee0 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
16ef0 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
16f00 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
16f10 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
16f20 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
16f30 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
16f40 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
16f50 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
16f60 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
16f70 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
16f80 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
16f90 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
16fa0 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
16fb0 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
16fc0 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
16fd0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
16fe0 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
16ff0 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
17000 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
17010 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
17020 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
17030 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
17040 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
17050 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
17060 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
17070 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
17080 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
17090 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
170a0 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
170b0 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
170c0 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
170d0 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
170e0 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
170f0 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
17100 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
17110 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
17120 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
17130 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
17140 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
17150 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
17160 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
17170 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
17180 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
17190 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
171a0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
171b0 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
171c0 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
171d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
171e0 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
171f0 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
17200 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
17210 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
17220 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
17230 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
17240 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
17250 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
17260 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
17270 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
17280 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
17290 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
172a0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
172b0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
172c0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
172d0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
172e0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
172f0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
17300 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
17310 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
17320 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
17330 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
17340 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
17350 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
17360 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
17370 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
17380 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
17390 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
173a0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
173b0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
173c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
173d0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
173e0 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
173f0 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
17400 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
17410 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
17420 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
17430 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
17440 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
17450 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
17460 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
17470 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
17480 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
17490 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
174a0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
174b0 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
174c0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20  utine */.    u8 
174d0 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
174e0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
174f0 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
17500 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
17510 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  s */.    unsigne
17520 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
17530 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
17540 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
17550 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
17560 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
17570 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
17580 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
17590 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
175a0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
175b0 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
175c0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
175d0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
175e0 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ne */.    unsign
175f0 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
17600 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
17610 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
17620 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
17630 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17640 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
17650 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
17660 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
17670 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
17680 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
17690 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
176a0 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
176b0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
176c0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
176d0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
176e0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
176f0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
17700 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
17710 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
17720 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
17730 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
17740 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
17750 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
17760 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
17770 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
17780 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
17790 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
177a0 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
177b0 64 42 79 3b 20 2f 2a 20 49 64 65 6e 74 69 66 69  dBy; /* Identifi
177c0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
177d0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
177e0 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
177f0 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
17800 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
17810 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17820 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
17830 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
17840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
17850 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
17860 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
17870 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
17880 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
17890 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
178a0 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
178b0 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
178c0 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
178d0 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
178e0 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
178f0 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
17900 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
17910 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
17920 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
17930 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
17940 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
17950 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
17960 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
17970 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
17980 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
17990 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
179a0 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
179b0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
179c0 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
179d0 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
179e0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
179f0 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
17a00 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
17a10 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
17a20 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
17a30 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
17a40 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
17a50 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
17a60 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
17a70 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
17a80 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
17a90 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
17aa0 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
17ab0 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
17ac0 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
17ad0 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
17ae0 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
17af0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17b00 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
17b10 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
17b20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17b30 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
17b40 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
17b50 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
17b60 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
17b70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17b80 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
17b90 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
17ba0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
17bb0 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
17bc0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17bd0 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
17be0 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
17bf0 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
17c00 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
17c10 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
17c20 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
17c30 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
17c40 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
17c50 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
17c60 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
17c70 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
17c80 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
17c90 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
17ca0 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
17cb0 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
17cc0 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
17cd0 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
17ce0 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
17cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17d00 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
17d10 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
17d20 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
17d30 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
17d40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17d50 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20  E_NO_AUTOINDEX  
17d60 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73     0x0080 /* Dis
17d70 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20  allow automatic 
17d80 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
17d90 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
17da0 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
17db0 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
17dc0 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
17dd0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
17de0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
17df0 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
17e00 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
17e10 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
17e20 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
17e30 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
17e40 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
17e50 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
17e60 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
17e70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17e80 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
17e90 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f   0x0800 /* Suppo
17ea0 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
17eb0 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
17ec0 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45  fine WHERE_REOPE
17ed0 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30  N_IDX       0x10
17ee0 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65  00 /* Try to use
17ef0 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f   OP_ReopenIdx */
17f00 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
17f10 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
17f20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
17f30 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
17f40 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17f50 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
17f60 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
17f70 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
17f80 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17f90 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
17fa0 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
17fb0 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
17fc0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
17fd0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
17fe0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
17ff0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
18000 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
18010 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
18020 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
18030 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
18040 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
18050 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
18060 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
18070 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
18080 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
18090 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
180a0 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
180b0 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
180c0 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
180d0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
180e0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
180f0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
18100 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
18110 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
18120 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
18130 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
18140 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
18150 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
18160 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
18170 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
18180 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
18190 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
181a0 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
181b0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
181c0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
181d0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
181e0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
181f0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
18200 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
18210 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
18220 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
18230 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
18240 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
18250 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
18260 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
18270 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
18280 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
18290 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
182a0 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
182b0 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
182c0 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
182d0 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
182e0 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
182f0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
18300 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
18310 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
18320 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
18330 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
18340 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
18350 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
18360 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
18370 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
18380 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
18390 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
183a0 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
183b0 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
183c0 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
183d0 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
183e0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
183f0 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
18400 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
18410 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
18420 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
18430 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
18440 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
18450 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
18460 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
18470 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
18480 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
18490 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
184a0 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
184b0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
184c0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
184d0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
184e0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
184f0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
18500 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
18510 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
18520 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
18530 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
18540 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
18550 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
18560 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
18570 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
18580 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
18590 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
185a0 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
185b0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
185c0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
185d0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
185e0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
185f0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
18600 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18610 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
18620 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
18630 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
18640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18650 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
18660 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
18670 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
18680 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
18690 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
186a0 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
186b0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
186c0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
186d0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
186e0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
186f0 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
18700 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20  d..**.** Note:  
18710 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73  NC_MinMaxAgg mus
18720 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t have the same 
18730 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d  value as SF_MinM
18740 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c  axAgg and.** SQL
18750 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e  ITE_FUNC_MINMAX.
18760 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  .** .*/.#define 
18770 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
18780 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
18790 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
187a0 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
187b0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
187c0 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  g    0x0002  /* 
187d0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
187e0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
187f0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
18800 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
18810 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  004  /* True if 
18820 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
18830 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
18840 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
18850 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
18860 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66  0008  /* True if
18870 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
18880 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
18890 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
188a0 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
188b0 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  10  /* True if r
188c0 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
188d0 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
188e0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
188f0 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
18900 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
18910 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
18920 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
18930 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
18940 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18950 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
18960 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
18970 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
18980 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
18990 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
189a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
189b0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
189c0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
189d0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
189e0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
189f0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
18a00 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
18a10 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
18a20 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
18a30 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
18a40 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
18a50 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
18a60 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
18a70 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
18a80 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
18a90 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
18aa0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
18ab0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
18ac0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
18ad0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
18ae0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
18af0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
18b00 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
18b10 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
18b20 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
18b30 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
18b40 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
18b50 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
18b60 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
18b70 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
18b80 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
18b90 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
18ba0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
18bb0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
18bc0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
18bd0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
18be0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
18bf0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18c00 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
18c10 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
18c20 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
18c30 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
18c40 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
18c50 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
18c60 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
18c70 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
18c80 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
18c90 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
18ca0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
18cb0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
18cc0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
18cd0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18ce0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
18cf0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
18d00 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
18d10 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
18d20 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
18d30 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
18d40 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
18d50 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
18d60 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
18d70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
18d80 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
18d90 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
18da0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
18db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18dc0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
18dd0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
18de0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
18df0 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
18e00 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
18e10 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
18e20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
18e30 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
18e40 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
18e50 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
18e60 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
18e70 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
18e80 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
18e90 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
18ea0 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
18eb0 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
18ec0 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
18ed0 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
18ee0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
18ef0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
18f00 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
18f10 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
18f20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
18f30 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52  /.  u64 nSelectR
18f40 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  ow;        /* Es
18f50 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
18f60 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
18f70 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
18f80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18f90 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
18fa0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
18fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18fc0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
18fd0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
18fe0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
18ff0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
19000 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
19010 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
19020 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
19030 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
19040 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
19050 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
19060 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
19070 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
19080 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
19090 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
190a0 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
190b0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
190c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
190d0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
190e0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
190f0 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
19100 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
19110 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
19120 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
19130 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
19140 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
19150 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
19160 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
19170 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
19180 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
19190 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
191a0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
191b0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
191c0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
191d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
191e0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
191f0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
19200 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
19210 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
19220 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
19230 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
19240 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
19250 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
19260 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
19270 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
19280 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78  l             0x
19290 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
192a0 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
192b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
192c0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
192d0 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  0x0004  /* Ident
192e0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
192f0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
19300 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
19310 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20  e       0x0008  
19320 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
19330 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19340 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
19350 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
19360 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68  0010  /* Uses th
19370 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
19380 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
19390 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
193a0 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
193b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
193c0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
193d0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
193e0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
193f0 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52     0x0040  /* FR
19400 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
19410 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
19420 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
19430 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20  Compound        
19440 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20  0x0080  /* Part 
19450 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
19460 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ery */.#define S
19470 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
19480 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e    0x0100  /* Syn
19490 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
194a0 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
194b0 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56  define SF_MultiV
194c0 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30 30  alue      0x0200
194d0 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55    /* Single VALU
194e0 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c  ES term with mul
194f0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
19500 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
19510 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30 20  rom      0x0400 
19520 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
19530 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
19540 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
19550 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
19560 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a  rt    0x0800  /*
19570 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
19580 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
19590 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
195a0 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
195b0 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
195c0 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
195d0 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
195e0 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ax() */.#define 
195f0 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
19600 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68     0x2000  /* Th
19610 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
19620 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
19630 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
19640 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
19650 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20    0x4000  /* By 
19660 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
19670 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
19680 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
19690 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
196a0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
196b0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
196c0 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
196d0 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
196e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
196f0 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
19700 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
19710 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
19720 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
19730 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
19740 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19750 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
19760 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
19770 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19780 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
19790 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
197a0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
197b0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
197c0 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
197d0 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
197e0 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
197f0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19800 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
19810 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
19820 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
19830 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
19840 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
19860 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
19870 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
19880 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
19890 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
198a0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
198b0 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
198e0 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
198f0 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
19900 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19910 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
19920 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
19930 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
19940 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
19950 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
19960 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
19970 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
19980 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
19990 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
199a0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
199b0 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
199c0 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
199d0 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
199e0 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
199f0 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19a10 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
19a20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
19a30 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
19a40 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19a50 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
19a60 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
19a70 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
19aa0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
19ab0 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
19ac0 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
19ad0 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
19ae0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
19af0 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
19b00 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
19b30 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
19b40 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
19b50 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
19b60 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
19b70 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
19b80 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
19b90 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
19ba0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19bb0 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
19bc0 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
19bd0 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
19be0 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
19c10 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
19c20 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
19c30 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
19c40 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19c50 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
19c60 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
19c70 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
19c80 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
19c90 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
19ca0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19cb0 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19cc0 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19ce0 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19cf0 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19d00 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19d30 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
19d40 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
19d50 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19d60 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
19d70 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
19d80 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
19d90 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19dc0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19dd0 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19de0 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19df0 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
19e00 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
19e30 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
19e40 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
19e50 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
19e60 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
19e70 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
19e80 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
19e90 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
19ea0 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
19eb0 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
19ec0 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
19ed0 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
19ee0 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
19ef0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19f00 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
19f10 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
19f20 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
19f30 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
19f40 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
19f50 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19f60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19f70 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
19f80 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
19f90 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
19fa0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
19fb0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
19fd0 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
19fe0 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
19ff0 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
1a020 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
1a030 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
1a040 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a050 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
1a060 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1a070 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
1a080 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
1a090 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
1a0a0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1a0b0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
1a0e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1a0f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
1a100 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1a110 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
1a120 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
1a130 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
1a140 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
1a150 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a160 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
1a170 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
1a180 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
1a190 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
1a1a0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1a1b0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1a1c0 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1a1d0 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
1a200 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
1a210 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
1a220 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
1a250 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1a260 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
1a270 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1a280 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1a290 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
1a2a0 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
1a2b0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
1a2c0 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
1a2d0 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
1a2e0 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
1a310 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
1a320 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
1a330 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
1a340 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1a350 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
1a360 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
1a370 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1a380 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
1a390 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
1a3a0 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
1a3b0 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
1a3c0 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
1a3d0 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
1a3e0 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
1a3f0 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
1a400 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1a410 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
1a420 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
1a430 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
1a440 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
1a450 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
1a460 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a470 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1a480 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1a490 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
1a4a0 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
1a4b0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
1a4c0 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
1a4d0 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
1a4e0 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
1a4f0 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
1a500 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
1a510 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
1a520 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1a530 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
1a540 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
1a550 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1a560 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
1a570 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
1a580 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
1a590 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
1a5a0 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
1a5b0 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1a5c0 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1a5d0 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1a5e0 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1a5f0 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1a600 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1a610 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1a620 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1a630 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a640 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1a650 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1a660 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1a670 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1a680 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1a690 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a6a0 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1a6b0 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1a6c0 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1a6d0 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1a6e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1a6f0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1a700 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1a710 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1a720 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1a730 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a740 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1a750 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a760 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a770 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1a780 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1a790 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1a7a0 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1a7b0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1a7c0 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1a7d0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1a7e0 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1a7f0 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1a800 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1a810 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1a820 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1a830 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1a840 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
1a850 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
1a860 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1a870 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1a880 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1a890 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1a8a0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1a8b0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1a8c0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1a8d0 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1a8e0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1a8f0 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1a900 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1a910 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1a920 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a930 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1a940 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
1a950 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1a960 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1a970 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1a980 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1a990 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1a9a0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1a9b0 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1a9c0 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1a9d0 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1a9e0 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
1a9f0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1aa00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1aa10 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1aa20 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1aa30 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1aa40 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1aa50 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1aa60 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1aa70 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1aa80 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1aa90 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1aaa0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1aab0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1aac0 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1aad0 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1aae0 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
1aaf0 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1ab00 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1ab10 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1ab20 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1ab30 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1ab40 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1ab50 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1ab60 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1ab70 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1ab80 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ab90 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1aba0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1abb0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1abc0 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1abd0 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1abe0 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1abf0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1ac00 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1ac10 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1ac20 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ac40 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1ac50 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1ac60 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1ac70 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1ac80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1ac90 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1aca0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1acb0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1acc0 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1acd0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1ace0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1acf0 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1ad00 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1ad10 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1ad20 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1ad30 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1ad40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1ad50 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1ad60 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1ad70 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1ad80 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1ad90 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1ada0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1adb0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1adc0 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1add0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1ade0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1adf0 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1ae00 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ae10 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1ae20 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1ae30 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1ae40 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1ae50 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1ae60 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1ae70 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1ae80 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1ae90 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1aea0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1aeb0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1aec0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1aed0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1aee0 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1aef0 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1af00 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1af10 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1af20 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1af30 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1af40 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1af50 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1af60 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1af70 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1af80 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1af90 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1afa0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1afb0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1afc0 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1afd0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1afe0 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1aff0 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1b000 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1b010 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1b020 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1b030 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1b040 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1b050 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1b060 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1b070 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1b080 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1b090 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1b0a0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1b0b0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1b0c0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1b0d0 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1b0e0 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1b0f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1b100 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1b110 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1b120 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1b130 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1b140 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1b150 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1b160 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1b170 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1b180 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1b190 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b1a0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1b1b0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1b1c0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1b1d0 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1b1e0 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1b1f0 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1b200 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1b210 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1b220 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1b230 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1b240 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1b250 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1b260 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1b270 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1b280 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1b290 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1b2a0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1b2b0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1b2c0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1b2d0 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1b2e0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1b2f0 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1b300 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1b310 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1b320 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1b330 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1b340 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1b350 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b360 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1b370 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1b380 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1b390 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1b3a0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1b3b0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1b3c0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1b3d0 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1b3e0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1b3f0 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1b400 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1b410 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1b420 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1b430 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1b440 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1b450 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1b460 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1b470 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1b480 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1b490 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1b4a0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1b4b0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1b4c0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1b4d0 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1b4e0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1b4f0 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1b500 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1b510 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1b520 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1b530 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1b540 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1b550 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1b560 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1b570 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1b580 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1b590 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1b5a0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1b5b0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1b5c0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1b5d0 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1b5e0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1b5f0 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1b600 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1b610 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1b620 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1b630 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1b640 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1b650 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1b660 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1b670 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1b680 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1b690 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1b6a0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1b6b0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1b6c0 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1b6d0 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1b6e0 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1b6f0 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1b700 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1b710 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1b720 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1b730 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1b740 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1b750 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1b760 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1b770 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1b780 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1b790 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1b7a0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1b7b0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1b7c0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b7d0 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1b7e0 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1b7f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1b800 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1b810 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1b820 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1b830 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1b840 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1b850 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1b860 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1b870 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b880 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1b890 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1b8a0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1b8b0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1b8c0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1b8d0 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1b8e0 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1b8f0 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1b900 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1b910 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1b920 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1b930 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1b940 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1b950 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1b960 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1b970 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1b980 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1b990 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1b9a0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1b9b0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1b9c0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1b9d0 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1b9e0 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1b9f0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1ba00 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1ba10 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1ba20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1ba30 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1ba40 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1ba50 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1ba60 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1ba70 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1ba80 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1ba90 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1baa0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1bab0 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1bac0 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1bad0 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1bae0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1baf0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1bb00 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1bb10 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1bb20 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1bb30 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1bb40 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1bb50 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1bb60 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1bb70 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1bb80 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1bb90 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1bba0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1bbb0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1bbc0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1bbd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bbe0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1bbf0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1bc00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bc10 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1bc20 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1bc30 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1bc40 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1bc50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1bc60 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1bc70 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1bc80 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1bc90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1bca0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1bcb0 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1bcc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bcd0 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1bce0 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1bcf0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1bd00 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1bd10 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1bd20 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1bd30 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1bd40 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1bd50 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1bd60 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1bd70 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1bd80 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1bd90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1bda0 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1bdb0 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1bdc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1bdd0 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
1bde0 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
1bdf0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1be00 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1be10 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1be20 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1be30 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1be40 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1be50 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1be60 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1be70 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1be80 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1be90 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1bea0 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1beb0 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1bec0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bed0 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1bee0 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1bef0 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1bf00 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1bf10 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1bf20 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1bf30 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1bf40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1bf50 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1bf60 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1bf70 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1bf80 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1bf90 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1bfa0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1bfb0 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1bfc0 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1bfd0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1bfe0 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1bff0 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1c000 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1c010 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1c020 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1c030 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1c040 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1c050 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1c060 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1c070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1c080 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1c090 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1c0a0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1c0b0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1c0c0 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1c0d0 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1c0e0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1c0f0 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1c100 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1c110 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1c120 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1c130 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1c140 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1c150 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1c160 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1c170 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1c180 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1c190 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1c1a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1c1b0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1c1c0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1c1d0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1c1e0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1c1f0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1c200 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1c210 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1c220 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1c230 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1c240 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1c250 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1c260 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1c270 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1c280 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1c290 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1c2a0 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1c2b0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1c2c0 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1c2d0 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1c2e0 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1c2f0 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1c300 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1c310 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1c320 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1c330 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1c340 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1c350 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1c360 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c370 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1c380 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1c390 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1c3a0 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1c3b0 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1c3c0 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1c3d0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1c3e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1c3f0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1c400 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1c410 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c420 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1c430 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1c440 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1c450 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1c460 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1c470 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1c480 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1c490 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1c4a0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1c4b0 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1c4c0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1c4d0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1c4e0 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1c4f0 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1c500 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1c510 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1c520 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1c530 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1c540 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1c550 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1c560 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1c570 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1c580 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1c590 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1c5a0 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1c5b0 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1c5c0 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1c5d0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1c5e0 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1c5f0 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1c600 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1c610 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1c620 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1c630 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1c640 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1c650 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1c660 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1c670 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1c680 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1c690 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1c6a0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1c6b0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1c6c0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1c6d0 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1c6e0 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1c6f0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1c700 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1c710 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1c720 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1c730 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1c740 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1c750 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1c760 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1c770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c7a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c7b0 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
1c7c0 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
1c7d0 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
1c7e0 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
1c7f0 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
1c800 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
1c810 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
1c820 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
1c830 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
1c840 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
1c850 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
1c860 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65  rse,nVar) so the
1c870 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74   nVar field must
1c880 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69   be the first fi
1c890 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20  eld.  ** in the 
1c8a0 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1c8b0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1c8c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c8d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c8e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c8f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1c900 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
1c910 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c920 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1c930 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1c940 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1c950 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
1c960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c970 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
1c980 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
1c990 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  r[] */.  u8 iPkS
1c9a0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
1c9b0 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
1c9c0 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
1c9d0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
1c9e0 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20  8 bFreeWith;    
1c9f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ca00 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64   if pWith should
1ca10 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70   be freed with p
1ca20 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78  arser */.  u8 ex
1ca30 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
1ca40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1ca50 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
1ca60 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
1ca70 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
1ca80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1ca90 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
1caa0 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
1cab0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1cac0 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
1cad0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1cae0 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
1caf0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
1cb00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
1cb10 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
1cb20 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
1cb30 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20  nt nAlias;      
1cb40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cb50 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65  er of aliased re
1cb60 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73  sult set columns
1cb70 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68   */.  int nHeigh
1cb80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1cb90 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
1cba0 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
1cbb0 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
1cbc0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1cbd0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
1cbe0 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20   int iSelectId; 
1cbf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44             /* ID
1cc00 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65   of current sele
1cc10 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ct for EXPLAIN o
1cc20 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69  utput */.  int i
1cc30 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20  NextSelectId;   
1cc40 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61       /* Next ava
1cc50 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44  ilable select ID
1cc60 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1cc70 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  put */.#endif.  
1cc80 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20  char **azVar;   
1cc90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
1cca0 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f  nters to names o
1ccb0 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  f parameters */.
1ccc0 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
1ccd0 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
1cce0 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
1ccf0 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
1cd00 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
1cd10 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
1cd20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
1cd30 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
1cd40 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
1cd50 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
1cd60 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
1cd70 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
1cd80 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
1cd90 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
1cda0 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
1cdb0 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
1cdc0 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
1cdd0 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
1cde0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1cdf0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1ce00 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
1ce10 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
1ce20 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
1ce30 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20   callbacks */.  
1ce40 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
1ce50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  ;         /* Tok
1ce60 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
1ce70 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
1ce80 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
1ce90 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1cea0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
1ceb0 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
1cec0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1ced0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1cee0 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cf00 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
1cf10 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
1cf20 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
1cf30 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
1cf40 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
1cf50 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
1cf60 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
1cf70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
1cf80 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
1cf90 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1cfa0 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
1cfb0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
1cfc0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
1cfd0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
1cfe0 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
1cff0 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
1d000 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
1d010 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1d020 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
1d030 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
1d040 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f  or NULL */.};../
1d050 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
1d060 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
1d070 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
1d080 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
1d090 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
1d0a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1d0b0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
1d0c0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1d0d0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
1d0e0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1d0f0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
1d100 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
1d110 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1d120 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d130 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1d140 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
1d150 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
1d160 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
1d170 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
1d180 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
1d190 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
1d1a0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
1d1b0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
1d1c0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
1d1d0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1d1e0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
1d1f0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1d200 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
1d210 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1d220 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d230 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1d240 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
1d250 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
1d260 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
1d270 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  ous opcodes..*/.
1d280 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
1d290 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
1d2a0 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
1d2b0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1d2c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1d2d0 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1d2e0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d2f0 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1d300 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1d310 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d320 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1d330 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1d340 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1d350 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1d360 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1d370 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1d380 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1d390 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1d3a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d3b0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1d3c0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1d3d0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1d3e0 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1d3f0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1d400 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1d410 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1d420 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1d430 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1d440 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
1d450 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
1d460 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1d470 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
1d480 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
1d490 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
1d4a0 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
1d4b0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1d4c0 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
1d4d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1d4e0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
1d4f0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1d500 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
1d510 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
1d520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d530 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1d540 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
1d550 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
1d560 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
1d570 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d580 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
1d590 78 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x04    /* P2 to 
1d5a0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
1d5b0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
1d5c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d5d0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
1d5e0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
1d5f0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
1d600 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
1d610 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
1d620 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1d630 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1d640 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
1d650 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
1d660 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
1d670 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1d680 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1d690 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1d6a0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1d6b0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1d6c0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1d6d0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1d6e0 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1d6f0 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1d700 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
1d710 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
1d720 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
1d730 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
1d740 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
1d750 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
1d760 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d770 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
1d780 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
1d790 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
1d7a0 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
1d7b0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1d7c0 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
1d7d0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1d7e0 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
1d7f0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
1d800 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
1d810 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
1d820 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
1d830 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
1d840 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
1d850 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1d860 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1d870 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1d880 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
1d890 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1d8a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
1d8b0 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1d8c0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
1d8d0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1d8e0 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
1d8f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1d900 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
1d910 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
1d940 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
1d950 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
1d960 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
1d970 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
1d980 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d9a0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1d9b0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1d9c0 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
1d9d0 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d9f0 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
1da00 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
1da10 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
1da20 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
1da30 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
1da40 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
1da50 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
1da60 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
1da70 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
1da80 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
1da90 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
1daa0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
1dab0 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
1dae0 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
1daf0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1db00 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
1db10 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1db20 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
1db30 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
1db40 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
1db50 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1db60 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1db70 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
1db80 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
1db90 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
1dba0 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
1dbb0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1dbc0 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
1dbd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1dbe0 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
1dbf0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
1dc00 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
1dc10 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
1dc20 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
1dc30 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
1dc40 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1dc50 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
1dc60 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
1dc70 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1dc80 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1dc90 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1dca0 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1dcb0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1dcc0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1dcd0 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1dce0 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1dcf0 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1dd00 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1dd10 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1dd20 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1dd30 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1dd40 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1dd50 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1dd60 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1dd70 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1dd80 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1dd90 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1dda0 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
1ddb0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1ddc0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1ddd0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1dde0 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1ddf0 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1de00 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1de10 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1de20 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1de30 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1de40 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
1de50 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1de60 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1de70 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1de80 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1de90 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1dea0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1deb0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1dec0 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
1ded0 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
1dee0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
1def0 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
1df00 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
1df10 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
1df20 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
1df30 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
1df40 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
1df50 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1df60 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
1df70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
1df80 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
1df90 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
1dfa0 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
1dfb0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1dfc0 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
1dfd0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1dfe0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1dff0 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
1e000 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1e010 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1e020 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
1e030 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
1e040 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
1e050 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1e060 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
1e070 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
1e080 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73  the table to ins
1e090 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78  ert into.. * pEx
1e0a0 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69  prList -> If thi
1e0b0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1e0c0 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e  NTO ... VALUES .
1e0d0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1e0e0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1e0f0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76     this stores v
1e100 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65  alues to be inse
1e110 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  rted. Otherwise 
1e120 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74  NULL.. * pIdList
1e130 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1e140 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1e150 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  ... (<column-nam
1e160 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20  es>) VALUES ... 
1e170 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e180 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1e190 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
1e1a0 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
1e1b0 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
1e1c0 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
1e1d0 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
1e1e0 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
1e1f0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
1e200 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1e210 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
1e220 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
1e230 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1e240 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
1e250 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
1e260 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1e270 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1e280 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1e290 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
1e2a0 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1e2b0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1e2c0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1e2d0 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1e2e0 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
1e2f0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1e300 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
1e310 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1e320 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1e330 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e340 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1e350 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1e360 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
1e370 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
1e380 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
1e390 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
1e3a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1e3b0 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
1e3c0 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
1e3d0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
1e3e0 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
1e3f0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
1e400 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
1e410 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
1e420 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1e430 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1e440 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1e450 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
1e460 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
1e470 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
1e480 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
1e490 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
1e4a0 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
1e4b0 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
1e4c0 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
1e4d0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
1e4e0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
1e4f0 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
1e500 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
1e510 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1e520 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
1e530 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
1e540 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1e550 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1e560 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1e570 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1e580 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1e590 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1e5a0 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1e5b0 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1e5c0 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1e5d0 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1e5e0 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
1e5f0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1e600 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1e610 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1e620 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1e630 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1e640 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1e650 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1e660 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1e670 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1e680 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1e690 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1e6a0 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1e6b0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1e6c0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1e6d0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1e6e0 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1e6f0 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1e700 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1e710 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1e720 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1e730 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1e740 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1e750 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1e760 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1e770 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1e780 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1e790 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1e7a0 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1e7b0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1e7c0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1e7d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1e7e0 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1e7f0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1e800 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1e810 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1e820 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1e830 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1e840 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e850 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1e860 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1e870 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1e880 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1e890 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1e8a0 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1e8b0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1e8c0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1e8d0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1e8e0 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1e8f0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1e900 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1e910 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1e920 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1e930 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1e940 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1e950 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1e960 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1e970 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1e980 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1e990 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1e9a0 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1e9b0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1e9c0 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1e9d0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1e9e0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1e9f0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1ea00 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1ea10 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1ea20 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1ea30 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1ea40 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1ea50 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1ea60 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1ea70 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1ea80 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1ea90 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1eaa0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1eab0 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1eac0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1ead0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1eae0 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1eaf0 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1eb00 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1eb10 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1eb20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1eb30 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ed allocation.  
1eb40 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20  0 for no malloc 
1eb50 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20  usage */.  u8   
1eb60 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
1eb70 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
1eb80 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
1eb90 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  OBIG */.};.#defi
1eba0 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
1ebb0 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
1ebc0 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
1ebd0 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1ebe0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1ebf0 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1ec00 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1ec10 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1ec20 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1ec30 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1ec40 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1ec50 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1ec60 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1ec70 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1ec80 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1ec90 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1eca0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1ecb0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1ecc0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1ecd0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1ece0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1ecf0 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1ed00 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1ed10 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1ed20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1ed30 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1ed40 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1ed50 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1ed60 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1ed70 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1ed80 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1ed90 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1eda0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1edb0 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1edc0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1edd0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1ede0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1edf0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1ee00 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1ee10 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1ee20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ee30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1ee40 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1ee50 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1ee60 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ee80 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1ee90 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1eea0 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1eeb0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1eec0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1eed0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1eee0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1eef0 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ef10 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1ef20 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1ef30 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1ef40 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1ef50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1ef60 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1ef70 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1ef80 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1ef90 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1efa0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1efb0 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1efc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
1efd0 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
1efe0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
1eff0 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
1f000 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
1f010 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1f040 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1f050 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1f060 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1f070 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1f080 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1f090 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1f0a0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1f0b0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1f0c0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1f0d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1f0e0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1f0f0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1f100 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1f110 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1f120 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1f130 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1f140 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1f150 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1f160 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1f170 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1f180 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f1a0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1f1b0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1f1c0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1f1e0 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1f1f0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1f200 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1f210 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1f220 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1f230 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1f240 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1f250 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1f260 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1f270 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1f280 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1f290 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1f2a0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1f2b0 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1f2c0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1f2d0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1f2e0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1f2f0 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1f300 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1f330 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1f340 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1f350 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1f360 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f370 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1f380 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1f390 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1f3a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1f3b0 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1f3c0 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1f3f0 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1f400 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1f410 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f430 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1f440 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1f450 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1f460 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1f470 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1f480 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1f490 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1f4a0 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1f4b0 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1f4c0 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1f4d0 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1f4e0 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
1f4f0 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
1f500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1f510 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
1f520 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
1f530 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
1f540 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
1f550 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
1f560 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
1f570 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
1f580 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
1f590 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
1f5a0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
1f5d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
1f5e0 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
1f5f0 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
1f620 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
1f630 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
1f640 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1f670 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
1f680 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1f690 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f6b0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1f6c0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1f6d0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
1f6e0 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
1f6f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f700 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1f710 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1f720 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
1f730 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1f740 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f750 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
1f760 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
1f770 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
1f780 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
1f790 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
1f7a0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1f7b0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
1f7c0 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
1f7d0 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
1f7e0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
1f7f0 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
1f800 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f820 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
1f830 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
1f840 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1f850 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
1f860 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
1f870 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1f880 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
1f890 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
1f8a0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1f8b0 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
1f8c0 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
1f8d0 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
1f8e0 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
1f8f0 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
1f900 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
1f910 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
1f920 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
1f930 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
1f940 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
1f950 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
1f960 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
1f970 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e  oid*,int iSrcLin
1f980 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
1f990 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
1f9a0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
1f9b0 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
1f9f0 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1fa00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
1fa10 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74  ILTIN_TEST.  int
1fa20 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
1fa30 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
1fa40 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
1fa50 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
1fa60 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
1fa70 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa90 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
1faa0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
1fab0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
1fac0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
1fad0 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
1fae0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1faf0 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
1fb00 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
1fb10 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
1fb20 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1fb30 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
1fb40 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1fb50 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
1fb60 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
1fb70 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
1fb80 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1fb90 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
1fba0 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
1fbb0 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
1fbc0 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
1fbd0 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
1fbe0 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
1fbf0 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
1fc00 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
1fc10 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
1fc20 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
1fc30 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
1fc40 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
1fc50 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
1fc60 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
1fc70 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1fc80 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
1fc90 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
1fca0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
1fcb0 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
1fcc0 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
1fcd0 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
1fce0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1fcf0 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
1fd00 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
1fd10 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
1fd20 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
1fd30 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1fd40 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1fd50 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1fd60 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1fd70 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1fd80 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1fd90 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1fda0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1fdb0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1fdc0 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1fdd0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1fde0 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1fdf0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1fe00 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
1fe10 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
1fe20 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1fe30 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
1fe40 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1fe50 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1fe60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fe80 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1fe90 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1fea0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1fed0 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
1fee0 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
1ff10 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
1ff20 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
1ff60 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
1ff70 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
1ff80 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ffa0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
1ffb0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
1fff0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20020 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75    /* A cursor nu
20030 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c  mber */.    SrcL
20040 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
20070 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
20080 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
20090 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
200a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
200b0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
200c0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
200d0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
200e0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
200f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
20100 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
20110 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
20120 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
20130 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
20140 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
20150 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
20160 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
20170 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
20180 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
20190 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
201a0 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
201b0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
201c0 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
201d0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
201e0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
201f0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
20200 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
20210 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
20220 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
20230 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
20240 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
20250 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
20260 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
20270 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
20280 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
20290 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
202a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
202b0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
202c0 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
202d0 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
202e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
202f0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
20300 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
20310 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
20320 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
20330 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20340 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
20350 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
20360 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
20370 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
20380 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20390 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
203a0 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
203b0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
203c0 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
203f0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
20400 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
20410 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
20420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
20430 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
20440 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
20450 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
20460 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
20470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
20480 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
20490 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
204a0 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
204b0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
204c0 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
204d0 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
204e0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
204f0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
20500 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
20510 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
20520 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
20530 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
20540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
20550 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
20560 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
20570 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
20580 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
20590 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
205a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
205b0 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
205c0 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
205d0 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
205e0 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
205f0 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
20600 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
20610 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
20620 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
20630 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
20640 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
20650 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
20660 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
20670 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
20680 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
20690 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
206a0 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
206b0 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
206c0 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
206d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
206e0 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
206f0 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
20700 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
20710 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
20720 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
20730 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
20740 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
20750 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
20760 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
20770 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
20780 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
20790 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
207b0 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
207c0 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
207f0 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
20800 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
20810 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
20820 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20850 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
20860 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
20870 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
20880 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
20890 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
208a0 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
208b0 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
208c0 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
208d0 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
208e0 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
208f0 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
20900 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
20910 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
20920 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
20930 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
20940 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
20950 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
20960 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
20970 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
20980 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
20990 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
209a0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
209b0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
209c0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
209d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
209e0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
209f0 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
20a00 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
20a10 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
20a20 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
20a30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
20a40 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
20a50 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
20a60 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
20a70 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
20a80 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
20a90 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
20aa0 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
20ab0 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
20ac0 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
20ad0 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
20ae0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
20af0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
20b00 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
20b10 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
20b20 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
20b30 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
20b40 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
20b50 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
20b60 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
20b70 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
20b80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20b90 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
20ba0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20bb0 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
20bc0 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
20bd0 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a  E_FTS3 1.#endif.
20be0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
20bf0 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
20c00 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
20c10 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
20c20 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
20c30 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
20c40 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
20c50 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
20c60 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
20c70 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
20c80 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
20c90 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
20ca0 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
20cb0 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
20cc0 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
20cd0 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
20ce0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
20cf0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
20d00 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
20d10 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
20d20 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
20d30 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
20d40 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
20d50 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
20d60 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
20d70 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
20d80 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
20d90 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
20da0 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
20db0 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
20dc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
20dd0 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
20de0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
20df0 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
20e00 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20e10 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
20e20 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20e30 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
20e40 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20e50 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20e60 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
20e70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
20e80 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
20e90 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20ea0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20eb0 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
20ec0 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
20ed0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20ee0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20ef0 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
20f00 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
20f10 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
20f20 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20f30 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20f40 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
20f50 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
20f60 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20f70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20f80 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
20f90 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
20fa0 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
20fb0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
20fc0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20fd0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
20fe0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
20ff0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
21000 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
21010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21020 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
21030 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
21040 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
21050 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
21060 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
21070 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21080 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
21090 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
210a0 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
210b0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
210c0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
210d0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
210e0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
210f0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
21100 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
21110 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
21120 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21130 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
21140 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
21150 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
21160 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23  ar)(x)).#endif.#
21170 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21180 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
21190 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74  _DIAGS.int sqlit
211a0 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
211b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
211c0 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
211d0 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64  prototypes.*/.#d
211e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
211f0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
21200 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33  icmp.int sqlite3
21210 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
21220 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
21230 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
21240 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
21250 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
21260 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
21270 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
21280 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
21290 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75  *sqlite3Malloc(u
212a0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
212b0 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34  e3MallocZero(u64
212c0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
212d0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
212e0 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
212f0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
21300 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
21310 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
21320 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
21330 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21340 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
21350 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
21360 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21370 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21380 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
21390 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
213a0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
213b0 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
213c0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
213d0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
213e0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
213f0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
21400 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
21410 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
21420 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
21430 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
21440 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
21450 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
21460 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
21470 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
21480 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
21490 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
214a0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
214b0 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
214c0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
214d0 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
214e0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
214f0 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
21500 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
21510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
21520 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
21530 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
21540 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
21550 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
21560 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
21570 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
21580 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
21590 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
215a0 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
215b0 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
215c0 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
215d0 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
215e0 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
215f0 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
21600 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
21610 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
21620 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
21630 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
21640 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
21650 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
21660 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
21670 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
21680 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
21690 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
216a0 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
216b0 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
216c0 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
216d0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
216e0 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
216f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21700 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
21710 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
21720 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
21730 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
21740 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
21750 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
21760 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
21770 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
21780 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21790 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
217a0 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
217b0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
217c0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
217d0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
217e0 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
217f0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
21800 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21810 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
21820 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
21830 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
21840 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21850 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
21860 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
21870 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
21880 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
21890 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
218a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
218b0 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
218c0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
218d0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
218e0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
218f0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
21900 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
21910 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
21920 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
21930 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
21940 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
21950 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
21960 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
21970 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
21980 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
21990 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
219a0 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
219b0 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
219c0 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
219d0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
219e0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
219f0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
21a00 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
21a10 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
21a20 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
21a30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21a40 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
21a50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21a60 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
21a70 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
21a80 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
21a90 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
21aa0 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
21ab0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
21ac0 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
21ad0 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
21ae0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
21af0 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
21b00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21b10 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
21b20 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
21b30 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
21b40 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21b50 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
21b60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
21b70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
21b80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
21b90 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
21ba0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
21bb0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
21bc0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
21bd0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
21be0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
21bf0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
21c00 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
21c10 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
21c20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
21c30 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
21c40 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
21c50 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c70 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
21c80 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
21c90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
21ca0 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
21cb0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
21cc0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
21cd0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
21ce0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
21cf0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21d00 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
21d10 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
21d20 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
21d30 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
21d40 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
21d50 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
21d60 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
21d70 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
21d80 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
21d90 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
21da0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21db0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
21dc0 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
21dd0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21de0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
21df0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21e00 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
21e10 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
21e20 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
21e30 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
21e40 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
21e50 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
21e60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21e70 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
21e80 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
21e90 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
21ea0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
21eb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
21ec0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
21ed0 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
21ee0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
21ef0 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
21f00 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21f10 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
21f20 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
21f30 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
21f40 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
21f50 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
21f60 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
21f70 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
21f80 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
21f90 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
21fa0 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
21fb0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
21fc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21fd0 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
21fe0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
21ff0 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  .);.int sqlite3D
22000 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69  equote(char*);.i
22010 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
22020 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
22030 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
22040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
22050 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
22060 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
22070 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
22080 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
22090 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
220a0 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
220b0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
220c0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
220d0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
220e0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
220f0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
22100 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22110 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
22120 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
22130 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
22140 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
22150 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
22160 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
22170 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
22180 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
22190 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
221a0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
221b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
221c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
221d0 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
221e0 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
221f0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
22200 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
22210 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
22220 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
22230 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
22240 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
22250 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
22260 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
22270 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
22280 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
22290 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
222a0 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
222b0 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
222c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
222d0 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
222e0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
222f0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
22300 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
22310 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
22320 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
22330 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
22340 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
22350 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
22360 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22370 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
22380 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22390 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
223a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
223b0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
223c0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
223d0 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
223e0 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
223f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
22400 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
22410 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
22420 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
22430 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
22440 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
22450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
22460 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
22470 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22480 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22490 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
224a0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
224b0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
224c0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
224d0 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
224e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
224f0 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
22500 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
22510 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
22520 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
22530 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22540 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
22550 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
22560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
22570 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
22580 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
22590 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
225a0 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
225b0 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
225c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
225d0 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
225e0 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
225f0 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
22600 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
22610 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
22620 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
22630 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
22640 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
22650 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
22660 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
22670 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
22680 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
22690 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
226a0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
226b0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
226c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
226d0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
226e0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
226f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
22700 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22710 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
22720 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
22730 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
22740 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
22750 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
22760 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
22770 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
22780 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
22790 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
227a0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
227b0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
227c0 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
227d0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
227e0 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
227f0 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
22800 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
22810 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
22820 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
22830 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
22840 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
22850 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
22860 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
22870 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
22880 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
22890 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
228a0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
228b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
228c0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
228d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
228e0 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
228f0 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
22900 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
22910 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
22920 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
22930 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
22940 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
22950 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
22960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
22970 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
22980 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
22990 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
229a0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
229b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
229c0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
229d0 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
229e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
229f0 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
22a00 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
22a10 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
22a20 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
22a30 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22a40 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
22a50 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
22a60 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
22a70 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
22a80 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
22a90 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
22aa0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
22ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
22ac0 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
22ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22ae0 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
22af0 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
22b00 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
22b10 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
22b20 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
22b30 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
22b40 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
22b50 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
22b60 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
22b70 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
22b80 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
22b90 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
22ba0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22bb0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
22bc0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22bd0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
22be0 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
22bf0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
22c00 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
22c10 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
22c20 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
22c30 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
22c40 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
22c50 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
22c60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
22c70 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
22c80 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
22c90 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
22ca0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
22cb0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
22cc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
22cd0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
22ce0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22cf0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22d00 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
22d10 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
22d20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22d30 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
22d40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22d50 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
22d60 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
22d70 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22d80 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
22d90 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22da0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22db0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22dc0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
22dd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
22de0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
22df0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22e00 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
22e10 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
22e20 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
22e30 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
22e40 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
22e50 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
22e60 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
22e70 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
22e80 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
22e90 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
22ea0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
22eb0 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
22ec0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
22ed0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22ee0 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
22ef0 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
22f00 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
22f10 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22f20 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
22f30 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22f40 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22f50 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
22f60 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
22f70 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
22f80 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
22f90 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
22fd0 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
22fe0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22ff0 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
23000 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
23010 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
23020 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
23030 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
23040 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
23050 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
23060 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
23070 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
23080 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23090 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
230a0 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
230b0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
230c0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
230d0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
230e0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
230f0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
23100 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
23110 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
23120 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
23130 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
23140 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
23150 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
23160 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
23170 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
23180 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
23190 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
231a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
231b0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
231c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
231d0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
231e0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
231f0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
23200 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
23210 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
23220 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
23230 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
23240 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
23250 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
23260 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
23270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23280 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
23290 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
232a0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
232b0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
232c0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
232d0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
232e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
232f0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
23300 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23310 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
23320 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23330 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23340 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
23350 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
23360 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
23370 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
23380 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
23390 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
233a0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
233b0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
233c0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
233d0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
233e0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
233f0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
23400 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
23410 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23420 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
23430 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23440 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23450 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
23460 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
23470 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
23480 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
23490 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
234a0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
234b0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
234c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
234d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
234e0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
234f0 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
23500 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
23510 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
23520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23530 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
23540 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23550 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
23560 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
23570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23580 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
23590 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
235a0 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
235b0 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
235c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
235d0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
235e0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
235f0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
23600 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
23610 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23620 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
23630 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
23640 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23650 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
23660 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
23670 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
23680 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
23690 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
236a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
236b0 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
236c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
236d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
236e0 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
236f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
23700 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23710 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
23720 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23730 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
23740 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23750 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
23760 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
23770 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23780 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
23790 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
237a0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
237b0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
237c0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
237d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
237e0 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
237f0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23800 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
23810 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
23820 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23830 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23840 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
23850 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
23860 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23870 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
23880 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
23890 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
238a0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
238b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
238c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
238d0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
238e0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
238f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23900 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
23910 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
23920 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
23930 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
23940 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
23950 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
23960 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
23970 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
23980 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
23990 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
239a0 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
239b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
239c0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
239d0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
239e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
239f0 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
23a00 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
23a10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23a20 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
23a30 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23a40 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
23a50 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
23a60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23a70 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23a80 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23a90 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
23aa0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
23ab0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23ac0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
23ad0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
23ae0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
23af0 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
23b00 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
23b10 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
23b20 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
23b30 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23b40 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23b50 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23b60 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
23b70 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23b80 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23b90 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23ba0 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
23bb0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23bc0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23bd0 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
23be0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
23bf0 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
23c00 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
23c10 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
23c20 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
23c30 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23c40 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
23c50 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
23c60 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
23c70 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
23c80 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
23c90 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
23ca0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
23cb0 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
23cc0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23cd0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
23ce0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
23cf0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
23d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23d10 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
23d20 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
23d30 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23d40 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
23d50 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
23d60 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
23d70 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
23d80 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
23d90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
23da0 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
23db0 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
23dc0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
23dd0 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
23de0 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
23df0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23e00 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
23e10 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
23e20 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
23e30 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
23e40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23e50 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
23e60 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
23e70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
23e80 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
23e90 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
23ea0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
23eb0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
23ec0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
23ed0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
23ee0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
23ef0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
23f00 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
23f10 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
23f20 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
23f30 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
23f40 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
23f50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
23f60 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
23f70 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
23f80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23f90 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
23fa0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23fb0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
23fc0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
23fd0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
23fe0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
23ff0 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
24000 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
24010 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
24020 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
24030 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
24040 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
24050 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24060 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
24070 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24080 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
24090 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
240a0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
240b0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
240c0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
240d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
240e0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
240f0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
24100 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
24110 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
24120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
24130 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
24140 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
24150 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
24160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24170 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
24180 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
24190 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
241a0 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
241b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
241c0 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
241d0 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
241e0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
241f0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
24200 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
24210 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
24220 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
24250 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
24260 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
24270 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
24280 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
24290 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
242a0 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
242b0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
242c0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
242d0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
242e0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
242f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24300 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
24310 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
24320 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24330 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
24340 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
24350 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
24360 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
24370 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
24380 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
24390 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
243a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
243b0 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
243c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
243d0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
243e0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
243f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
24400 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
24410 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
24420 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
24430 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
24440 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
24450 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
24460 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
24470 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
24480 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
24490 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
244a0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
244b0 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
244c0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
244d0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
244e0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
244f0 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
24500 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
24510 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
24520 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
24530 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
24540 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24550 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
24560 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
24570 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
24580 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
24590 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
245a0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
245b0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
245c0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
245d0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
245e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
245f0 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
24600 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
24610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24620 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
24630 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
24640 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
24650 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
24660 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
24670 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
24680 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
24690 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
246a0 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
246b0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
246c0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
246d0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
246e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
246f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
24700 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24710 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
24720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
24730 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
24740 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
24750 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
24760 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
24770 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
24780 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
24790 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
247a0 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
247b0 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
247c0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
247f0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
24800 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
24810 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
24820 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
24830 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
24840 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
24850 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
24860 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24870 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
24880 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
24890 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
248a0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
248b0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
248c0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
248d0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
248e0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
248f0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
24900 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
24910 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
24920 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
24930 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
24940 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
24950 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
24980 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
24990 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
249a0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
249b0 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
249c0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
249d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
249e0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
249f0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
24a00 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
24a10 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
24a20 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
24a30 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
24a40 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
24a50 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
24a60 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24a70 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
24a80 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
24a90 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
24aa0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
24ab0 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
24ac0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
24ad0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
24b00 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
24b10 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
24b20 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
24b30 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
24b40 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
24b50 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
24b60 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24b70 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
24b80 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
24b90 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
24ba0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24bb0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
24bc0 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
24bd0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
24be0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
24bf0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
24c00 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
24c10 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
24c20 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
24c30 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
24c40 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
24c50 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
24c60 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
24c70 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
24c80 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
24c90 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
24ca0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24cb0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
24cc0 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
24cd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
24ce0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
24cf0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24d00 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
24d10 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
24d20 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24d30 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
24d40 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
24d50 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
24d60 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
24d70 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
24d80 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24d90 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
24da0 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
24db0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
24dc0 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
24dd0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
24de0 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
24df0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
24e00 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
24e10 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
24e20 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
24e30 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
24e40 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
24e50 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
24e60 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
24e70 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
24e80 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
24e90 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
24ea0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24eb0 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
24ec0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
24ed0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24ee0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
24ef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24f00 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
24f10 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
24f20 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
24f30 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
24f40 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
24f50 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24f60 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
24f70 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24f80 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
24f90 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
24fa0 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
24fb0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24fc0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
24fd0 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
24fe0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
24ff0 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
25000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
25010 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
25020 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25030 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
25040 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
25050 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
25060 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
25070 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
25080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
25090 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
250a0 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
250b0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
250c0 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
250d0 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
250e0 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
250f0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
25100 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25110 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
25120 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
25130 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
25140 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
25150 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
25160 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
25170 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25180 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
25190 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
251a0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
251b0 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
251c0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
251d0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
251e0 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
251f0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
25200 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
25210 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25220 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
25230 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
25240 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
25250 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
25260 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
25270 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
25280 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
25290 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
252a0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
252b0 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
252c0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
252d0 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
252e0 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
252f0 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
25300 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
25310 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
25320 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
25330 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
25340 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
25350 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
25360 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
25370 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
25380 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
25390 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
253a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
253b0 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
253c0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
253d0 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
253e0 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
253f0 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
25400 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
25410 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
25420 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
25430 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
25440 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
25450 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
25460 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
25470 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
25480 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
25490 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
254a0 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
254b0 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
254c0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
254d0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
254e0 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
254f0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
25500 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
25510 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
25520 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
25530 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
25540 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
25550 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
25560 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
25570 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
25580 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
25590 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
255a0 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
255b0 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
255c0 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
255d0 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
255e0 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
255f0 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
25600 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
25610 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
25620 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
25630 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
25640 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
25650 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
25660 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
25670 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
25680 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
25690 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
256a0 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
256b0 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
256c0 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
256d0 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
256e0 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
256f0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
25700 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
25710 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
25720 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
25730 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
25740 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
25750 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
25760 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
25770 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25780 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
25790 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
257a0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
257b0 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
257c0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
257d0 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
257e0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
257f0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
25800 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
25810 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
25820 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
25830 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
25840 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
25850 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
25860 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
25870 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
25880 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
25890 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
258a0 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
258b0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
258c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
258d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
258e0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
258f0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25900 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
25910 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
25920 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
25930 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
25940 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
25950 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
25960 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
25970 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
25980 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
25990 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
259a0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
259b0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
259c0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
259d0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
259e0 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
259f0 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
25a00 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
25a10 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
25a20 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
25a30 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
25a40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
25a50 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
25a60 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
25a70 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
25a80 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
25a90 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
25aa0 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
25ab0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
25ac0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
25ad0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
25ae0 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
25af0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
25b00 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
25b10 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
25b20 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
25b30 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
25b40 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
25b50 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
25b60 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
25b70 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
25b80 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
25b90 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
25ba0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
25bb0 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
25bc0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
25bd0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
25be0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
25bf0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
25c00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25c10 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
25c20 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
25c30 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
25c40 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
25c50 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
25c60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
25c70 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
25c80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25c90 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
25ca0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
25cb0 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
25cc0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
25cd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
25ce0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
25cf0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
25d00 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
25d10 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
25d20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
25d30 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
25d40 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
25d50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
25d60 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
25d70 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
25d80 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
25d90 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
25da0 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
25db0 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
25de0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
25df0 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
25e00 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
25e10 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
25e20 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
25e30 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
25e40 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
25e50 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
25e60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
25e70 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
25e80 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
25e90 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
25ea0 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
25eb0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
25ec0 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
25ed0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
25ee0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25ef0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
25f00 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
25f10 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
25f20 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
25f30 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
25f40 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25f50 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
25f60 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
25f70 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25f80 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
25f90 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
25fa0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
25fb0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
25fc0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
25fd0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
25fe0 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
25ff0 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
26000 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
26010 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
26020 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
26030 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
26040 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
26050 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
26060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26070 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
26080 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
26090 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
260a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
260b0 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
260c0 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
260d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
260e0 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
260f0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
26110 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
26120 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
26130 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
26140 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26150 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26160 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
26170 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26180 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
26190 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
261a0 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
261b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
261c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
261d0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
261e0 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
261f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
26200 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
26210 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
26220 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26230 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
26240 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
26250 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
26260 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26270 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
26280 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
26290 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
262a0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
262b0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
262c0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
262d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
262e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
262f0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
26300 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
26310 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
26320 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
26330 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
26340 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
26350 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
26360 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
26370 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
26380 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
26390 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
263a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
263b0 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
263c0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
263d0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
263e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
263f0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
26400 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
26410 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
26420 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
26430 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
26440 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
26450 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26460 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
26470 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
26480 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
26490 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
264a0 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
264b0 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
264c0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
264d0 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
264e0 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
264f0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
26500 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
26510 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26530 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
26540 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
26550 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
26560 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
26570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
26580 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
26590 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
265a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
265b0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
265c0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
265d0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
265e0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
265f0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
26600 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
26610 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
26620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26630 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
26640 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
26650 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26660 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
26670 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
26680 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
26690 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
266a0 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
266b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
266c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
266d0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
266e0 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
266f0 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
26700 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
26710 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
26720 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
26730 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
26740 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
26750 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
26760 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
26770 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
26780 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
26790 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
267a0 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
267b0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
267c0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
267d0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
267e0 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
267f0 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
26800 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
26810 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
26820 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
26830 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
26840 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
26850 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
26860 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f  t, void *, .  vo
26870 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
26880 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
26890 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
268a0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
268b0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
268c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
268d0 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
268e0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
268f0 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
26900 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69  pDestructor.);.i
26910 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
26920 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
26930 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26940 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
26950 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
26960 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
26970 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
26980 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
26990 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
269a0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
269b0 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
269c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
269d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
269e0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
269f0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
26a00 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
26a10 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
26a20 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
26a30 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
26a40 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
26a50 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
26a60 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26a70 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
26a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26a90 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
26aa0 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
26ab0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
26ac0 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
26ad0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
26ae0 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
26af0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
26b00 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
26b10 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
26b20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
26b30 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
26b40 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
26b50 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
26b60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
26b70 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
26b80 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
26b90 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
26ba0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
26bb0 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
26bc0 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64  Value(Parse*,Ind
26bd0 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f  ex*,UnpackedReco
26be0 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e  rd**,Expr*,u8,in
26bf0 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  t,int*);.int sql
26c00 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
26c10 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45  omExpr(Parse*, E
26c20 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65  xpr*, u8, sqlite
26c30 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64  3_value**);.void
26c40 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
26c50 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52  beFree(UnpackedR
26c60 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ecord*);.int sql
26c70 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28  ite3Stat4Column(
26c80 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
26c90 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  void*, int, int,
26ca0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
26cb0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
26cc0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
26cd0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
26ce0 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
26cf0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
26d00 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
26d10 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71  )(u64));.void sq
26d20 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
26d30 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
26d40 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
26d50 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
26d60 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
26d70 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
26d80 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
26d90 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
26da0 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
26db0 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
26dc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
26dd0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
26de0 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
26df0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
26e00 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
26e10 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
26e20 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
26e30 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
26e40 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
26e50 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
26e60 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
26e70 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
26e80 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
26e90 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
26ea0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
26eb0 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
26ec0 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
26ed0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
26ee0 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
26ef0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
26f00 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
26f10 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
26f20 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
26f30 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
26f40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
26f50 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
26f60 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26f70 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
26f80 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
26f90 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
26fa0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
26fb0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
26fc0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26fd0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
26fe0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26ff0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
27000 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
27010 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
27020 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
27030 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
27040 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
27050 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
27060 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
27070 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
27080 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
27090 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
270a0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
270b0 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
270c0 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
270d0 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
270e0 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
270f0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
27100 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
27110 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
27120 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
27130 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
27140 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
27150 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
27160 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
27170 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
27180 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
27190 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
271a0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
271b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
271c0 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
271d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
271e0 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
271f0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
27200 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
27210 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
27220 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
27230 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
27240 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
27250 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
27260 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
27270 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
27280 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
27290 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
272a0 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
272b0 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
272c0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
272d0 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
272e0 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
272f0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
27300 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
27310 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
27320 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
27330 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27340 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
27350 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
27360 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
27370 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
27380 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
27390 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
273a0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
273b0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
273c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
273d0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
273e0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
273f0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
27400 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
27410 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
27420 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
27430 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
27440 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
27450 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
27460 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
27470 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
27480 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
27490 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
274a0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
274b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
274c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
274d0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
274e0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
274f0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
27500 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
27510 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
27520 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
27530 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
27540 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
27550 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
27560 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
27570 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
27580 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
27590 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
275a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
275b0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
275c0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
275d0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
275e0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
275f0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
27600 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
27610 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
27620 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
27630 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
27640 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
27650 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
27660 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
27670 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
27680 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
27690 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
276a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
276b0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
276c0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
276d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
276e0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
276f0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
27700 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
27710 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
27720 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
27730 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
27740 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
27750 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
27760 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
27770 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27780 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
27790 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
277a0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
277b0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
277c0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
277d0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
277e0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
277f0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
27800 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
27810 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
27820 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
27830 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
27840 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27850 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
27860 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27870 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
27880 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
27890 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
278a0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
278b0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
278c0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
278d0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
278e0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
278f0 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
27900 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
27910 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
27920 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
27930 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
27940 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
27950 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
27960 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
27970 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
27980 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
27990 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
279a0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
279b0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
279c0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
279d0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
279e0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
279f0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
27a00 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
27a10 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
27a20 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
27a30 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
27a40 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
27a50 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
27a60 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
27a70 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
27a80 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
27a90 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
27aa0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
27ab0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27ac0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
27ad0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27ae0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
27af0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
27b00 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
27b10 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27b20 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
27b30 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
27b40 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
27b50 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
27b60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27b70 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
27b80 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
27b90 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
27ba0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27bb0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
27bc0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27bd0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
27be0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
27bf0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
27c00 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
27c10 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
27c20 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
27c30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27c40 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
27c50 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27c60 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
27c70 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27c80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
27c90 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
27ca0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27cb0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
27cc0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
27cd0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
27ce0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
27cf0 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
27d00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
27d10 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
27d20 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27d30 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
27d40 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
27d50 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
27d60 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
27d70 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
27d80 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27d90 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
27da0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
27db0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
27dc0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
27dd0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
27de0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
27df0 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
27e00 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
27e10 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27e20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
27e30 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
27e40 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
27e50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
27e60 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
27e70 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
27e80 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
27e90 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
27ea0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
27eb0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
27ec0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
27ed0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
27ee0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
27ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
27f00 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
27f10 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
27f20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27f30 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
27f40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
27f50 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
27f60 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
27f70 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
27f80 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
27f90 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27fa0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27fb0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
27fc0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
27fd0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
27fe0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
27ff0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
28000 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
28010 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
28020 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
28030 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
28040 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
28050 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
28060 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
28070 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
28080 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
28090 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
280a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
280b0 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
280c0 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
280d0 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
280e0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
280f0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
28100 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
28110 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
28120 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
28130 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
28140 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
28150 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
28160 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
28170 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
28180 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
28190 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
281a0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
281b0 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
281c0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
281d0 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
281e0 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
281f0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
28200 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28210 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
28220 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
28230 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
28240 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
28250 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28260 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
28270 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
28280 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
28290 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
282a0 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
282b0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
282c0 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
282d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
282e0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
282f0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
28300 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
28310 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
28320 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
28330 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
28340 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
28350 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
28360 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
28370 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
28380 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
28390 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
283a0 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
283b0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
283c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
283d0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
283e0 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
283f0 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
28400 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
28410 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
28420 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
28430 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
28440 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
28450 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
28460 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
28470 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
28480 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
28490 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
284a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
284b0 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
284c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
284d0 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
284e0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
284f0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
28500 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
28510 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
28520 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28530 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
28540 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
28550 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28560 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
28570 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
28580 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
28590 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
285a0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
285b0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
285c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
285d0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
285e0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
285f0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
28600 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
28610 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
28620 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
28630 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
28640 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
28650 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
28660 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
28670 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
28680 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
28690 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
286a0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
286b0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
286c0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
286d0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
286e0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
286f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28700 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
28710 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
28720 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28730 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
28740 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
28750 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
28760 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
28770 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
28780 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
28790 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
287a0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
287b0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
287c0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
287d0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
287e0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
287f0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
28800 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
28810 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
28820 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
28830 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
28840 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
28850 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
28860 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
28870 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
28880 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
28890 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
288a0 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
288b0 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
288c0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
288d0 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
288e0 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
288f0 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
28900 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
28910 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
28920 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
28930 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
28940 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
28950 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
28960 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
28970 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
28980 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
28990 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
289a0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
289b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
289c0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
289d0 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
289e0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
289f0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
28a00 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
28a10 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
28a20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
28a30 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
28a40 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
28a50 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
28a60 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
28a70 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
28a80 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
28a90 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
28aa0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
28ab0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
28ac0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
28ad0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
28ae0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
28af0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
28b00 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
28b10 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
28b20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
28b30 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
28b40 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
28b50 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
28b60 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
28b70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28b80 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
28b90 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
28ba0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
28bb0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
28bc0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
28bd0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
28be0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
28bf0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
28c00 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
28c10 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
28c20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
28c30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
28c40 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
28c50 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
28c60 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
28c70 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
28c80 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
28c90 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
28ca0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28cb0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
28cc0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
28cd0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
28ce0 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
28cf0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
28d00 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
28d10 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
28d20 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
28d30 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
28d40 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28d50 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
28d60 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
28d70 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
28d80 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
28d90 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
28da0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
28db0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
28dc0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
28dd0 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
28de0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
28df0 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
28e00 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
28e10 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
28e20 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
28e30 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
28e40 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
28e50 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
28e60 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
28e70 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
28e80 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
28e90 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
28ea0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
28eb0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
28ec0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28ed0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
28ee0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
28ef0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
28f00 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
28f10 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
28f20 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
28f30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28f40 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28f50 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
28f60 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
28f70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
28f80 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
28f90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28fa0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
28fb0 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
28fc0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
28fd0 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
28fe0 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
28ff0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
29000 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
29010 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
29020 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
29030 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
29040 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
29050 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
29060 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
29070 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
29080 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
29090 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
290a0 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
290b0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
290c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
290d0 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
290e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
290f0 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
29100 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
29110 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
29120 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
29130 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
29140 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
29150 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
29160 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
29170 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
29180 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
29190 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65  STAT_VTAB) || de
291a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
291b0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
291c0 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c  statRegister(sql
291d0 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ite3*);.#endif..
291e0 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54  #endif /* _SQLIT
291f0 45 49 4e 54 5f 48 5f 20 2a 2f 0a                 EINT_H_ */.