/ Hex Artifact Content
Login

Artifact 72eeb2eb3b62e312299cc4597dc0ebaa066182c1:


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: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1bb0: 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61 72  ic(_ReadWriteBar
1bc0: 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65 0a  rier).#    else.
1bd0: 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c  #      include <
1be0: 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20  cmnintrin.h>.#  
1bf0: 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69 66    endif.#  endif
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c10: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
1c20: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
1c30: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
1c40: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
1c50: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1c60: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1c70: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1c80: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1c90: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1ca0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1cb0: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1cc0: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1cd0: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1ce0: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1cf0: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
1d00: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
1d10: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
1d20: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
1d30: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
1d40: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
1d50: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1d60: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1d70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1d80: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1d90: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1da0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1db0: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1dc0: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1dd0: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1de0: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1df0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1e00: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
1e10: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
1e20: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
1e30: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1e40: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
1e50: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1e60: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1e70: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1e80: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1e90: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1ea0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1eb0: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1ec0: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1ed0: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1ee0: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1ef0: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
1f00: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1f10: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
1f20: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
1f30: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
1f40: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
1f50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1f60: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1f70: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1f80: 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  ** EVIDENCE-OF: 
1f90: 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65  R-25715-37072 Me
1fa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1fb0: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 65  statistics are e
1fc0: 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66  nabled by.** def
1fd0: 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69  ault unless SQLi
1fe0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1ff0: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ith SQLITE_DEFAU
2000: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69  LT_MEMSTATUS=0 i
2010: 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20  n.** which case 
2020: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2030: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
2040: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
2050: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ault..*/.#if !de
2060: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
2070: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
2080: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2090: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
20a0: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
20b0: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
20c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
20d0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
20e0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
20f0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
2100: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
2110: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
2120: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
2130: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2140: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
2150: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
2160: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
2170: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
2180: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
2190: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
21a0: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
21b0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
21c0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
21d0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
21e0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
21f0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
2200: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
2210: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
2220: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
2230: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
2240: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
2250: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
2260: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
2270: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
2280: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
2290: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
22a0: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
22b0: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
22c0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
22d0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
22e0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
22f0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
2300: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
2310: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
2320: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
2330: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
2340: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
2350: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
2360: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
2370: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
2380: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
2390: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
23a0: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
23b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
23c0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
23d0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
23e0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
23f0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2400: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2410: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2420: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2430: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2440: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2450: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2460: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2470: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2480: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2490: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
24a0: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
24b0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
24c0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
24d0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
24e0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
24f0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
2500: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2510: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2520: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2540: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2550: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2560: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2570: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2590: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
25a0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
25b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
25c0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
25d0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
25e0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
25f0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
2600: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
2610: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2620: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2630: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2640: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2650: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2660: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2670: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2680: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2690: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
26a0: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
26b0: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
26c0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
26d0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
26e0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
26f0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
2700: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
2710: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2720: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2730: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2740: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2750: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2760: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2770: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2780: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2790: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
27a0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
27b0: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
27c0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
27d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
27e0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
27f0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
2800: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
2810: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2820: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2830: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2840: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2850: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2860: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2870: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2880: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2890: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
28a0: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
28b0: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
28c0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
28d0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
28e0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
28f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
2900: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
2910: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2920: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2930: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2940: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2950: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2960: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2970: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2980: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2990: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
29a0: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
29b0: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
29c0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
29d0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
29e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29f0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
2a00: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
2a10: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2a20: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2a30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2a40: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2a50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2a60: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2a70: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2a80: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2a90: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2aa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2ab0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2ac0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
2ad0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
2ae0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
2af0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
2b00: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b10: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2b20: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2b30: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2b40: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2b50: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2b60: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2b70: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2b80: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2b90: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2ba0: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2bb0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
2bc0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
2bd0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
2be0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
2bf0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
2c00: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
2c10: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2c20: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2c30: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2c40: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2c50: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2c60: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2c70: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2c80: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2c90: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2ca0: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2cb0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
2cc0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
2cd0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
2ce0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
2cf0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
2d00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
2d10: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2d20: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2d30: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2d40: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2d50: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2d60: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2d70: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2d80: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2d90: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2da0: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2db0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
2dc0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
2dd0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
2de0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2df0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2e00: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
2e10: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2e20: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2e30: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2e40: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2e50: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2e60: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2e70: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2e80: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2e90: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2ea0: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2eb0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2ec0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ed0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ee0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ef0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2f00: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2f10: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2f20: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2f30: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2f40: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2f50: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2f60: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2f70: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2f80: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2f90: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2fa0: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2fb0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2fc0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2fd0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2fe0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2ff0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3000: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3010: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3020: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3030: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3040: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3050: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3060: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3070: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3080: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3090: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
30a0: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
30b0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
30c0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
30d0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
30e0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
30f0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3100: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3110: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3120: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3130: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3140: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3150: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3160: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3170: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3180: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3190: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
31a0: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
31b0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
31c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
31d0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
31e0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
31f0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
3200: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
3210: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
3220: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
3230: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
3240: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
3250: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3260: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3270: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3280: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3290: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
32a0: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
32b0: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
32c0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
32d0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
32e0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
32f0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
3300: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
3310: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
3320: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
3330: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
3340: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
3350: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3360: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3370: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3380: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3390: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
33a0: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
33b0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
33c0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
33d0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
33e0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
33f0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
3400: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
3410: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3420: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3430: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3440: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3450: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3460: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3470: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3480: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3490: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
34a0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
34b0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
34c0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
34d0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
34e0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
34f0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3500: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3510: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3520: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3530: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3540: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3550: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3560: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3570: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3580: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3590: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
35a0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
35b0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
35c0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
35d0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
35e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
35f0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3600: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3610: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3620: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3630: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3640: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3650: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
3660: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
3670: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3680: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
3690: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
36a0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
36b0: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
36c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
36d0: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
36e0: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
36f0: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
3700: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
3710: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
3720: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
3730: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
3740: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
3750: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
3760: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
3770: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
3780: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
3790: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
37a0: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
37b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
37c0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
37d0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
37e0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
37f0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3800: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3810: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3820: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3830: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
3840: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
3850: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
3860: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
3870: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
3880: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
3890: 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67  nput is an integ
38a0: 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c  er that is too l
38b0: 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69  arge.** to fit i
38c0: 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73  n 32-bits.  This
38d0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
38e0: 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73  nside of various
38f0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d   testcase().** m
3900: 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20  acros to verify 
3910: 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73  that we have tes
3920: 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c  ted SQLite for l
3930: 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72  arge-file suppor
3940: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53  t..*/.#define IS
3950: 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28  _BIG_INT(X)  (((
3960: 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66  X)&~(i64)0xfffff
3970: 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  fff)!=0)../*.** 
3980: 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65  The macro unlike
3990: 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74  ly() is a hint t
39a0: 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20  hat surrounds a 
39b0: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65  boolean.** expre
39c0: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
39d0: 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61  ually false.  Ma
39e0: 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72  cro likely() sur
39f0: 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c  rounds.** a bool
3a00: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ean expression t
3a10: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74  hat is usually t
3a20: 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74  rue.  These hint
3a30: 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74  s could,.** in t
3a40: 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62  heory, be used b
3a50: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  y the compiler t
3a60: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
3a70: 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63  r code, but.** c
3a80: 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72  urrently they ar
3a90: 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20  e just comments 
3aa0: 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72  for human reader
3ab0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69  s..*/.#define li
3ac0: 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23  kely(X)    (X).#
3ad0: 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28  define unlikely(
3ae0: 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64  X)  (X)..#includ
3af0: 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c  e "hash.h".#incl
3b00: 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69  ude "parse.h".#i
3b10: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e  nclude <stdio.h>
3b20: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69  .#include <stdli
3b30: 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  b.h>.#include <s
3b40: 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64  tring.h>.#includ
3b50: 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e  e <assert.h>.#in
3b60: 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e  clude <stddef.h>
3b70: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
3b80: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
3b90: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
3ba0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
3bb0: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
3bc0: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
3bd0: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
3be0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3bf0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3c00: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
3c10: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
3c20: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
3c30: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
3c40: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
3c50: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
3c60: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
3c70: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
3c80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3c90: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
3ca0: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
3cb0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
3cc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
3cd0: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
3ce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
3cf0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
3d00: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
3d10: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
3d20: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
3d30: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
3d40: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
3d50: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
3d60: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
3d70: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
3d80: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
3d90: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
3da0: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
3db0: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
3dc0: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
3dd0: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
3de0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
3df0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
3e00: 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20  compiler .** to 
3e10: 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62  omit code used b
3e20: 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69  y TEMP tables wi
3e30: 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e  thout messy #ifn
3e40: 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  def statements..
3e50: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e60: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65  _OMIT_TEMPDB.#de
3e70: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
3e80: 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65   1.#else.#define
3e90: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23   OMIT_TEMPDB 0.#
3ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3eb0: 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e   "file format" n
3ec0: 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65  umber is an inte
3ed0: 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72  ger that is incr
3ee0: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
3ef0: 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76  .** the VDBE-lev
3f00: 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63  el file format c
3f10: 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c  hanges.  The fol
3f20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65  lowing macros de
3f30: 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20  fine the.** the 
3f40: 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72  default file for
3f50: 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61  mat for new data
3f60: 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61  bases and the ma
3f70: 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61  ximum file forma
3f80: 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69  t.** that the li
3f90: 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a  brary can read..
3fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3fb0: 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41  E_MAX_FILE_FORMA
3fc0: 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  T 4.#ifndef SQLI
3fd0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3fe0: 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20  FORMAT.# define 
3ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
4000: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e  ILE_FORMAT 4.#en
4010: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  dif../*.** Deter
4020: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69  mine whether tri
4030: 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73  ggers are recurs
4040: 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ive by default. 
4050: 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20   This can be.** 
4060: 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74  changed at run-t
4070: 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67  ime using a prag
4080: 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ma..*/.#ifndef 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: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
40c0: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
40d0: 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65  VE_TRIGGERS 0.#e
40e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76  ndif../*.** Prov
40f0: 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ide a default va
4100: 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54  lue for SQLITE_T
4110: 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73  EMP_STORE in cas
4120: 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63  e it is not spec
4130: 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  ified.** on the 
4140: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a  command-line.*/.
4150: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54  #ifndef SQLITE_T
4160: 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69  EMP_STORE.# defi
4170: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4180: 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20  TORE 1.# define 
4190: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
41a0: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
41b0: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
41c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
41d0: 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73   If no value has
41e0: 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66   been provided f
41f0: 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  or SQLITE_MAX_WO
4200: 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72  RKER_THREADS, or
4210: 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45   if.** SQLITE_TE
4220: 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20  MP_STORE is set 
4230: 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20  to 3 (never use 
4240: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29  temporary files)
4250: 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20  , set it .** to 
4260: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
4270: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
4280: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
4290: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
42a0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
42b0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
42c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
42e0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
42f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4300: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
4310: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4320: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
4330: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4340: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4350: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine 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 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
4390: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
43a0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
43b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
43c0: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
43d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
43e0: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
43f0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4400: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
4410: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4420: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
4430: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
4440: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
4450: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
4460: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
4470: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
4480: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
4490: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
44a0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
44b0: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
44c0: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
44d0: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
44e0: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
44f0: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
4500: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
4510: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
4520: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
4530: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
4540: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
4550: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69  will hold..*/.#i
4560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4570: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
4580: 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  SZ.# define SQLI
4590: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
45a0: 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e  E_INITSZ 100.#en
45b0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
45c0: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
45d0: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
45e0: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
45f0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
4600: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
4610: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
4620: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
4630: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
4640: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4650: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4660: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4670: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4680: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4690: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
46a0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
46b0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
46c0: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
46d0: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
46e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
46f0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
4700: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
4710: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
4720: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
4730: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
4740: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4750: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4760: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4770: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4780: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4790: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
47a0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
47b0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
47c0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
47d0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
47e0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
47f0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
4800: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
4810: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
4820: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
4830: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
4840: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4850: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4860: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4870: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4880: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4890: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
48a0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
48b0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
48c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
48d0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
48e0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
48f0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
4900: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
4910: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
4920: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
4930: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
4940: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4950: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4960: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4970: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4980: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4990: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
49a0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
49b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
49c0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
49d0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
49e0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
49f0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
4a00: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4a10: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
4a20: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
4a30: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4a40: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4a50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4a60: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4a70: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4a80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4a90: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4aa0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4ab0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4ac0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4ad0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4ae0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
4af0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
4b00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4b10: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
4b20: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4b30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
4b40: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4b50: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4b60: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4b70: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4b80: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4b90: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4ba0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4bb0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4bc0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4bd0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4be0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
4bf0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
4c00: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
4c10: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
4c20: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c30: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
4c40: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4c50: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4c60: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4c70: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4c80: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4c90: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4ca0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4cb0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4cc0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4cd0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4ce0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4cf0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4d00: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
4d10: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
4d20: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4d30: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
4d40: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4d50: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4d60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4d70: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4d80: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4d90: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4da0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4db0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4dc0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4dd0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4de0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
4df0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
4e00: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
4e10: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
4e20: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
4e30: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
4e40: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
4e50: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
4e60: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
4e70: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
4e80: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
4e90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
4ea0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
4eb0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
4ec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4ed0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
4ee0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
4ef0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
4f00: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
4f10: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
4f20: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
4f30: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
4f40: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
4f50: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
4f60: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
4f70: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
4f80: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
4f90: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
4fa0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
4fb0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
4fc0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
4fd0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
4fe0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
4ff0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
5000: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
5010: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5020: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
5030: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
5040: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
5050: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5060: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5070: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5080: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5090: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
50a0: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
50b0: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
50c0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
50d0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
50e0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
50f0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
5100: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
5110: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
5120: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
5130: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
5140: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
5150: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5160: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5170: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5180: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5190: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
51a0: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
51b0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
51c0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
51d0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
51e0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
51f0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5200: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5210: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5220: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5230: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5240: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5250: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5260: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5270: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5280: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5290: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
52a0: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
52b0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
52c0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
52d0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
52e0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
52f0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5300: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5310: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5320: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5330: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5340: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5350: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5360: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5370: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5380: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5390: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
53a0: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
53b0: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
53c0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
53d0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
53e0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
53f0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5400: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5410: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5420: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
5430: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
5440: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5450: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5460: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5470: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5480: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5490: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
54a0: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
54b0: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
54c0: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
54d0: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
54e0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
54f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
5500: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
5510: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5520: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
5530: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
5540: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5550: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5560: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5570: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5580: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5590: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
55a0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
55b0: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
55c0: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
55d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
55e0: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
55f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5600: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
5610: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
5620: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
5630: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
5640: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5650: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5660: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5670: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5680: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5690: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
56a0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
56b0: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
56c0: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
56d0: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
56e0: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
56f0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
5700: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
5710: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
5720: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
5730: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
5740: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5750: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5760: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5770: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5780: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  time..*/.#ifdef 
5790: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
57a0: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
57b0: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
57c0: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
57d0: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
57e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
57f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
5800: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
5810: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
5820: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
5830: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5840: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
5850: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
5860: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
5870: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
5880: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
5890: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
58a0: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
58b0: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
58c0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
58d0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
58e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
58f0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
5900: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5910: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5920: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
5930: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5940: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
5950: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5960: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
5970: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5980: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
5990: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
59a0: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
59b0: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
59c0: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
59d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
59e0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
59f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5a00: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
5a10: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a20: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
5a30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5a40: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
5a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5a60: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5a70: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
5a80: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
5a90: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
5aa0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5ab0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
5ac0: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
5ad0: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5ae0: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
5af0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5b00: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
5b10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5b20: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
5b30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5b40: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5b50: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5b60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5b70: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
5b80: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
5b90: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
5ba0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
5bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
5bc0: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
5bd0: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5be0: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
5bf0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
5c00: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
5c10: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
5c20: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
5c30: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
5c40: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5c50: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5c60: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5c70: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
5c80: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
5c90: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
5ca0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
5cb0: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
5cc0: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
5cd0: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5ce0: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
5cf0: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
5d00: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
5d10: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
5d20: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
5d30: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
5d40: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5d50: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5d60: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5d70: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
5d80: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
5d90: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
5da0: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5db0: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
5dc0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
5dd0: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5de0: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
5df0: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
5e00: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
5e10: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
5e20: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
5e30: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
5e40: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
5e50: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
5e60: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
5e70: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
5e80: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
5e90: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5ea0: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
5eb0: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
5ec0: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
5ed0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
5ee0: 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d  ght return us 4-
5ef0: 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20  byte aligned.** 
5f00: 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68  pointers.  In th
5f10: 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65  at case, only ve
5f20: 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67  rify 4-byte alig
5f30: 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  nment..*/.#ifdef
5f40: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
5f50: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20  LIGNED_MALLOC.# 
5f60: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
5f70: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
5f80: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
5f90: 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30   (char*)0)&3)==0
5fa0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
5fb0: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
5fc0: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
5fd0: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
5fe0: 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64  *)0)&7)==0).#end
5ff0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c  if../*.** Disabl
6000: 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f  e MMAP on platfo
6010: 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20  rms where it is 
6020: 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72  known to not wor
6030: 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  k.*/.#if defined
6040: 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c  (__OpenBSD__) ||
6050: 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54   defined(__QNXNT
6060: 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  O__).# undef SQL
6070: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6080: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6090: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
60a0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
60b0: 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20  Default maximum 
60c0: 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75  size of memory u
60d0: 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61  sed by memory-ma
60e0: 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20  pped I/O in the 
60f0: 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f  VFS.*/.#ifdef __
6100: 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64  APPLE__.# includ
6110: 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69  e <TargetConditi
6120: 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41  onals.h>.# if TA
6130: 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23  RGET_OS_IPHONE.#
6140: 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f     undef SQLITE_
6150: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6160: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6170: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
6180: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
6190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
61a0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
61b0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
61c0: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
61d0: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
61e0: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
61f0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
6200: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
6210: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
6220: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6230: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
6240: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
6250: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
6260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6270: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
6280: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
6290: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
62a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
62b0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
62c0: 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  0.# endif.# defi
62d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
62e0: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20  AP_SIZE_xc 1 /* 
62f0: 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  exclude from cti
6300: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
6310: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
6320: 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a  t MMAP_SIZE is z
6330: 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66  ero on all platf
6340: 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20  orms.  Or, even 
6350: 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64  if a larger.** d
6360: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6370: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74   is specified at
6380: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d   compile-time, m
6390: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74  ake sure that it
63a0: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63   does.** not exc
63b0: 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  eed the maximum 
63c0: 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  mmap size..*/.#i
63d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
63e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
63f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
6400: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6410: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
6420: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6430: 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  SIZE_xc 1  /* Ex
6440: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
6450: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  .c */.#endif.#if
6460: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6470: 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45  MMAP_SIZE>SQLITE
6480: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6490: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45   undef SQLITE_DE
64a0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
64b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
64c0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
64d0: 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E SQLITE_MAX_MMA
64e0: 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f  P_SIZE.#endif../
64f0: 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66  *.** Only one of
6500: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6510: 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45  TAT3 or SQLITE_E
6520: 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20  NABLE_STAT4 can 
6530: 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50  be defined..** P
6540: 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e  riority is given
6550: 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   to SQLITE_ENABL
6560: 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74  E_STAT4.  If eit
6570: 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c  her are defined,
6580: 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20   also.** define 
6590: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
65a0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a  AT3_OR_STAT4.*/.
65b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
65c0: 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64  ABLE_STAT4.# und
65d0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
65e0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
65f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6600: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
6610: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
6620: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6630: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6640: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6650: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6660: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6670: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
6680: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6690: 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a  OR_STAT4.#endif.
66a0: 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41  ./*.** SELECTTRA
66b0: 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20  CE_ENABLED will 
66c0: 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30  be either 1 or 0
66d0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
66e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20  ether or not.** 
66f0: 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79  the Select query
6700: 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69   generator traci
6710: 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e  ng logic is turn
6720: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65  ed on..*/.#if de
6730: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
6740: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
6750: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
6760: 45 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69  ECTTRACE).# defi
6770: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
6780: 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23  NABLED 1.#else.#
6790: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
67a0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65  ACE_ENABLED 0.#e
67b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
67c0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
67d0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
67e0: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
67f0: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
6800: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6810: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
6820: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
6830: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
6840: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
6850: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
6860: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
6870: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
6880: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
6890: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
68a0: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
68b0: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
68c0: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
68d0: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
68e0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
68f0: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
6900: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
6910: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
6920: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
6930: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
6940: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
6950: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
6960: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
6970: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
6980: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
6990: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
69a0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
69b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
69c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
69d0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
69e0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
69f0: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6a10: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
6a20: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
6a30: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
6a40: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
6a50: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
6a60: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
6a70: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
6a80: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
6a90: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
6aa0: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
6ab0: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
6ac0: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
6ad0: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
6ae0: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
6af0: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
6b00: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
6b10: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
6b20: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
6b30: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
6b40: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
6b50: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6b60: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
6b70: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
6b80: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
6b90: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
6ba0: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
6bb0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
6bc0: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
6bd0: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
6be0: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
6bf0: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
6c00: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
6c10: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
6c20: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
6c30: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
6c40: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
6c50: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6c60: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
6c70: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
6c80: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
6c90: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
6ca0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
6cb0: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
6cc0: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
6cd0: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
6ce0: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
6cf0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
6d00: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
6d10: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
6d20: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
6d30: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
6d40: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
6d50: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
6d60: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
6d70: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
6d80: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
6d90: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
6da0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
6db0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
6dc0: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
6dd0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
6de0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
6df0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
6e00: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
6e10: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
6e20: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
6e30: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
6e40: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
6e50: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
6e60: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
6e70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
6e80: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
6e90: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
6ea0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
6eb0: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
6ec0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
6ed0: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
6ee0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
6ef0: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
6f00: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
6f10: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
6f20: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
6f30: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
6f40: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
6f50: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
6f60: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
6f70: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
6f80: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
6f90: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
6fa0: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
6fb0: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
6fc0: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
6fd0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
6fe0: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
6ff0: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
7000: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
7010: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
7020: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
7030: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
7040: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
7050: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
7060: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
7070: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
7080: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
7090: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
70a0: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
70b0: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
70c0: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
70d0: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
70e0: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
70f0: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
7100: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
7110: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
7120: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
7130: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
7140: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
7150: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
7160: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
7170: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
7180: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
7190: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
71a0: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
71b0: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
71c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
71d0: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
71f0: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
7200: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
7210: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7220: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
7230: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
7240: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
7250: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
7260: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
7270: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
7280: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
7290: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
72a0: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
72b0: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
72c0: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
72d0: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
72e0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
72f0: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
7300: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
7310: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
7320: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
7330: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
7340: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7350: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
7360: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
7370: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
7380: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
7390: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
73a0: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
73b0: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
73c0: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
73d0: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
73e0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
73f0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
7400: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
7410: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
7420: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
7430: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
7440: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
7450: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
7460: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
7470: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
7480: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
7490: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
74a0: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
74b0: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
74c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
74d0: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
74e0: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
74f0: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
7500: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
7510: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
7520: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
7530: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
7540: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
7550: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
7560: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
7570: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
7580: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
7590: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
75a0: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
75b0: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
75c0: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
75d0: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
75e0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
75f0: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
7600: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
7610: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
7620: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
7630: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
7640: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
7650: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
7660: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
7670: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
7680: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
7690: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
76a0: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
76b0: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
76c0: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
76d0: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
76e0: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
76f0: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
7700: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
7710: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
7720: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7730: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
7740: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
7750: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
7760: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
7770: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7780: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
7790: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
77a0: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
77b0: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
77c0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
77d0: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
77e0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
77f0: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
7800: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7810: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
7820: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7830: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
7840: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
7850: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
7860: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
7870: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
7880: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
7890: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
78a0: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
78b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
78c0: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
78d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
78e0: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
78f0: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
7900: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
7910: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
7920: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7930: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
7940: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7950: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
7960: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7970: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
7980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
7990: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
79a0: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
79b0: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
79c0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
79d0: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
79e0: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
79f0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
7a00: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
7a10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
7a20: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
7a30: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
7a40: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
7a50: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
7a60: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
7a70: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
7a80: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
7a90: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
7aa0: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
7ab0: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
7ac0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
7ad0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
7ae0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
7af0: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
7b00: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
7b10: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
7b20: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
7b30: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
7b40: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
7b50: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
7b60: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
7b70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b80: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
7b90: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
7ba0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
7bb0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
7bc0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
7bd0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
7be0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
7bf0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
7c00: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
7c10: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
7c20: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
7c30: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
7c40: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
7c50: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
7c60: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
7c70: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
7c80: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
7c90: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
7ca0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7cb0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
7cc0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
7cd0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
7ce0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
7cf0: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
7d00: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
7d10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7d20: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
7d30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7d40: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
7d50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
7d60: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
7d70: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
7d80: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
7d90: 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63  *.** Defer sourc
7da0: 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62  ing vdbe.h and b
7db0: 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74  tree.h until aft
7dc0: 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20  er the "u8" and 
7dd0: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
7de0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
7df0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
7e00: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
7e10: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
7e20: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
7e30: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
7e40: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
7e50: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
7e60: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
7e70: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
7e80: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
7e90: 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  h"..#include "os
7ea0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
7eb0: 74 65 78 2e 68 22 0a 0a 2f 2a 20 57 68 65 6e 20  tex.h"../* When 
7ec0: 75 73 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  using a default 
7ed0: 77 61 6c 20 73 61 66 65 74 79 20 6c 65 76 65 6c  wal safety level
7ee0: 2c 20 74 68 65 20 73 61 66 65 74 79 20 6c 65 76  , the safety lev
7ef0: 65 6c 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 0a  el should only .
7f00: 2a 2a 20 63 68 61 6e 67 65 20 77 69 74 68 20 74  ** change with t
7f10: 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
7f20: 69 66 20 74 68 65 20 75 73 65 72 20 68 61 73 6e  if the user hasn
7f30: 27 74 20 6d 61 6e 75 61 6c 6c 79 20 73 70 65 63  't manually spec
7f40: 69 66 69 65 64 20 0a 2a 2a 20 70 72 61 67 6d 61  ified .** pragma
7f50: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 2c 20 69 66   synchronous, if
7f60: 20 74 68 65 79 20 68 61 76 65 20 74 68 65 20 64   they have the d
7f70: 65 66 61 75 6c 74 73 20 73 68 6f 75 6c 64 6e 27  efaults shouldn'
7f80: 74 20 62 65 20 61 70 70 6c 69 65 64 2e 0a 2a 2a  t be applied..**
7f90: 20 54 68 65 20 53 51 4c 49 54 45 5f 53 41 46 45   The SQLITE_SAFE
7fa0: 54 59 4c 45 56 45 4c 5f 46 49 58 45 44 20 76 61  TYLEVEL_FIXED va
7fb0: 6c 75 65 20 69 73 20 4f 52 65 64 20 69 6e 74 6f  lue is ORed into
7fc0: 20 74 68 65 20 44 62 2d 3e 73 61 66 65 74 79 5f   the Db->safety_
7fd0: 6c 65 76 65 6c 0a 2a 2a 20 66 69 65 6c 64 20 77  level.** field w
7fe0: 68 65 6e 20 74 68 65 20 75 73 65 72 20 68 61 73  hen the user has
7ff0: 20 73 70 65 63 69 66 69 65 64 20 61 20 73 79 6e   specified a syn
8000: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
8010: 20 76 69 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a   via pragma..*/.
8020: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
8030: 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45 44  AFETYLEVEL_FIXED
8040: 20 30 78 31 30 0a 23 64 65 66 69 6e 65 20 53 51   0x10.#define SQ
8050: 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c  LITE_SAFETYLEVEL
8060: 5f 56 41 4c 55 45 5f 4d 41 53 4b 20 30 78 30 33  _VALUE_MASK 0x03
8070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8080: 44 62 53 61 66 65 74 79 4c 65 76 65 6c 56 61 6c  DbSafetyLevelVal
8090: 75 65 28 6c 65 76 65 6c 29 20 28 6c 65 76 65 6c  ue(level) (level
80a0: 26 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45  &SQLITE_SAFETYLE
80b0: 56 45 4c 5f 56 41 4c 55 45 5f 4d 41 53 4b 29 0a  VEL_VALUE_MASK).
80c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
80d0: 62 53 61 66 65 74 79 4c 65 76 65 6c 49 73 46 69  bSafetyLevelIsFi
80e0: 78 65 64 28 6c 65 76 65 6c 29 20 28 6c 65 76 65  xed(level) (leve
80f0: 6c 26 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  l&SQLITE_SAFETYL
8100: 45 56 45 4c 5f 46 49 58 45 44 29 0a 0a 2f 2a 0a  EVEL_FIXED)../*.
8110: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8120: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8130: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8140: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8150: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8160: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
8170: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
8180: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
8190: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
81a0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
81b0: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
81c0: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
81d0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
81e0: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
81f0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8200: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8210: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8220: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8230: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8240: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8250: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8260: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
8270: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
8280: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72  atabase */.  Btr
8290: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
82a0: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
82b0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
82c0: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
82d0: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
82e0: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
82f0: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
8300: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
8310: 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61  disk */.  Schema
8320: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
8330: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74  * Pointer to dat
8340: 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f  abase schema (po
8350: 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a  ssibly shared) *
8360: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
8370: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
8380: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
8390: 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61  re stores a data
83a0: 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
83b0: 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f  ** Most Schema o
83c0: 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63  bjects are assoc
83d0: 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72  iated with a Btr
83e0: 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69  ee.  The excepti
83f0: 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68  on is.** the Sch
8400: 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50  ema for the TEMP
8410: 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74   databaes (sqlit
8420: 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68  e3.aDb[1]) which
8430: 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e   is free-standin
8440: 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20  g..** In shared 
8450: 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69  cache mode, a si
8460: 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65  ngle Schema obje
8470: 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64  ct can be shared
8480: 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20   by multiple.** 
8490: 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65  Btrees that refe
84a0: 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e  r to the same un
84b0: 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65  derlying BtShare
84c0: 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a  d object..** .**
84d0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
84e0: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
84f0: 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68  y deallocated wh
8500: 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65  en the last Btre
8510: 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65  e that.** refere
8520: 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73  nces them is des
8530: 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45  troyed.   The TE
8540: 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e  MP Schema is man
8550: 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a  ually freed by.*
8560: 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  * sqlite3_close(
8570: 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64  )..*.** A thread
8580: 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67   must be holding
8590: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
85a0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74  corresponding Bt
85b0: 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ree in order.** 
85c0: 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61  to access Schema
85d0: 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20   content.  This 
85e0: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
85f0: 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73   thread must als
8600: 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20  o be.** holding 
8610: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73  a mutex on the s
8620: 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f  qlite3 connectio
8630: 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f  n pointer that o
8640: 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a  wns the Btree..*
8650: 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68  * For a TEMP Sch
8660: 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f  ema, only the co
8670: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69  nnection mutex i
8680: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
8690: 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20  truct Schema {. 
86a0: 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b   int schema_cook
86b0: 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73  ie;   /* Databas
86c0: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
86d0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
86e0: 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69   file */.  int i
86f0: 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20  Generation;     
8700: 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f  /* Generation co
8710: 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e  unter.  Incremen
8720: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
8730: 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  ange */.  Hash t
8740: 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  blHash;        /
8750: 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64  * All tables ind
8760: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
8770: 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20    Hash idxHash; 
8780: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e         /* All (n
8790: 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e  amed) indices in
87a0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
87b0: 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68  .  Hash trigHash
87c0: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74  ;       /* All t
87d0: 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20  riggers indexed 
87e0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
87f0: 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20  h fkeyHash;     
8800: 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e    /* All foreign
8810: 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e   keys by referen
8820: 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  ced table name *
8830: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54  /.  Table *pSeqT
8840: 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ab;      /* The 
8850: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
8860: 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55  table used by AU
8870: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
8880: 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b   u8 file_format;
8890: 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
88a0: 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66  format version f
88b0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
88c0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
88d0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
88e0: 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20  ncoding used by 
88f0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
8900: 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61  .  u16 schemaFla
8910: 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  gs;     /* Flags
8920: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8930: 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
8940: 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65    int cache_size
8950: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
8960: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65   of pages to use
8970: 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f   in the cache */
8980: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  .};../*.** These
8990: 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
89a0: 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
89b0: 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
89c0: 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53  in the .** Db.pS
89d0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
89e0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
89f0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
8a00: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
8a10: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
8a20: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
8a30: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
8a40: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
8a50: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
8a60: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
8a70: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
8a80: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
8a90: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
8aa0: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
8ab0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
8ac0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
8ad0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
8ae0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
8af0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8b00: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
8b10: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
8b20: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
8b30: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
8b40: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
8b50: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
8b60: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
8b70: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
8b80: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
8b90: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
8ba0: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
8bb0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
8bc0: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
8bd0: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
8be0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
8bf0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
8c00: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
8c10: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
8c20: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
8c30: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
8c40: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
8c50: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
8c60: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
8c70: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
8c80: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
8c90: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
8ca0: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
8cb0: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
8cc0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
8cd0: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
8ce0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
8cf0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
8d00: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
8d10: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
8d20: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
8d30: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
8d40: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
8d50: 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a  0 bytes) */../*.
8d60: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
8d70: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
8d80: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
8d90: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
8da0: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
8db0: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
8dc0: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
8dd0: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
8de0: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
8df0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
8e00: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
8e10: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
8e20: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
8e30: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
8e40: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
8e50: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
8e60: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
8e70: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
8e80: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
8e90: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8ea0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
8eb0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8ec0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
8ed0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
8ee0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
8ef0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
8f00: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
8f10: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
8f20: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
8f30: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
8f40: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
8f50: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
8f60: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
8f70: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
8f80: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
8f90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
8fa0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
8fb0: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
8fc0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
8fd0: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
8fe0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
8ff0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
9000: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
9010: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
9020: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9030: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
9040: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
9050: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
9060: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
9070: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
9080: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
9090: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
90a0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
90b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
90c0: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
90d0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
90e0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
90f0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
9100: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
9110: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
9120: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
9130: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
9140: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
9150: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
9160: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
9170: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
9180: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9190: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
91a0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
91b0: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
91c0: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
91d0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
91e0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
91f0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
9200: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
9210: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
9220: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
9230: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
9240: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
9250: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
9260: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
9270: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
9280: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
9290: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
92a0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
92b0: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
92c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
92d0: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
92e0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
92f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9310: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
9320: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
9330: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
9340: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
9350: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
9360: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
9370: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
9380: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
9390: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
93a0: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
93b0: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
93c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
93d0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
93e0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
93f0: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
9400: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
9410: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
9420: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
9430: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
9440: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
9450: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
9460: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
9470: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
9480: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
9490: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
94a0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
94b0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
94c0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
94d0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
94e0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
94f0: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
9500: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
9510: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
9520: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
9530: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
9540: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
9550: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
9560: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
9570: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
9580: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
9590: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
95a0: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
95b0: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
95c0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
95d0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
95e0: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
95f0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
9600: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
9610: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
9620: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
9630: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
9640: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
9650: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
9660: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
9670: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
9680: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
9690: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
96a0: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
96b0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
96c0: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
96d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
96e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
96f0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
9700: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
9710: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
9720: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
9730: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
9740: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
9750: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
9760: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
9770: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
9780: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
9790: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
97b0: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
97c0: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
97d0: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
97e0: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
97f0: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
9800: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
9810: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
9820: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
9830: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
9840: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
9850: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
9860: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
9870: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
9880: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
9890: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
98a0: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
98b0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
98c0: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
98d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
98e0: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
98f0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
9900: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
9910: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
9920: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
9930: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
9940: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
9950: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
9960: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
9970: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
9980: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
9990: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
99a0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
99b0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
99c0: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
99d0: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
99e0: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
99f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
9a00: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
9a10: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
9a20: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
9a30: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
9a40: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
9a50: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
9a60: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
9a70: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
9a80: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
9a90: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
9aa0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
9ab0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
9ac0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
9ad0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9ae0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
9b10: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
9b20: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
9b30: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
9b40: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
9b50: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9b60: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9b70: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
9ba0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  );.#endif.../*.*
9bb0: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
9bc0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
9bd0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9be0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9bf0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
9c00: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
9c10: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
9c20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
9c30: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
9c40: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
9c50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
9c60: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
9c70: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
9c80: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
9c90: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
9ca0: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
9cb0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
9cc0: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
9cd0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
9ce0: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
9cf0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
9d00: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
9d10: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
9d20: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
9d30: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
9d40: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
9d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9d60: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
9d70: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
9d80: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
9d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9da0: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
9db0: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
9dc0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
9dd0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
9de0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
9df0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
9e00: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
9e10: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
9e20: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
9e30: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
9e40: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
9e50: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
9e60: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
9e70: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
9e80: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
9e90: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
9ea0: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ec0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
9ed0: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
9ee0: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
9ef0: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
9f00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
9f10: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
9f20: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
9f30: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20  urning */.  u16 
9f40: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
9f50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
9f60: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
9f70: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
9f80: 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ns */.  u8 enc; 
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
9fb0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61  coding */.  u8 a
9fc0: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
9fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9fe0: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
9ff0: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
a000: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
a010: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
a020: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
a030: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
a040: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
a050: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
a060: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
a070: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
a080: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
a090: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
a0a0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
a0b0: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
a0c0: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
a0d0: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
a0e0: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
a0f0: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
a100: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
a110: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
a120: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
a130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
a140: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
a150: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
a160: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
a170: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
a180: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
a190: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
a1a0: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
a1b0: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
a1c0: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
a1d0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
a1e0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
a1f0: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
a200: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
a210: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
a220: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
a230: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
a240: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
a250: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a260: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
a270: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
a280: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
a290: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2b0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
a2c0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
a2d0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
a2e0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
a300: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
a310: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
a320: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
a330: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
a340: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
a350: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
a360: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
a370: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
a380: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
a390: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
a3a0: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
a3b0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
a3c0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
a3d0: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
a3e0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
a3f0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
a400: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
a410: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
a420: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
a430: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
a440: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a460: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
a470: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
a480: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
a490: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
a4a0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
a4b0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
a4c0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
a4d0: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
a4e0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
a4f0: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
a500: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
a510: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
a520: 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b  8 imposterTable;
a530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
a540: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
a550: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20  er table */.  } 
a560: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
a570: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
a580: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a590: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
a5a0: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
a5b0: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a5d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
a5e0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
a5f0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
a600: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a620: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
a630: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
a640: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
a650: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
a660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a670: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
a680: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
a690: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
a6a0: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
a6b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a6c0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
a6d0: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
a6e0: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
a6f0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
a700: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a710: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
a720: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
a730: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
a740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
a750: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
a760: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
a770: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
a780: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
a790: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
a7a0: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
a7b0: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
a7c0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a7e0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a7f0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
a800: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
a810: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
a820: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
a830: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
a840: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a850: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a870: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a880: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
a890: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
a8a0: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
a8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a8c0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
a8d0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
a8e0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
a8f0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
a900: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
a910: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
a920: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
a930: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
a940: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a950: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
a960: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
a970: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
a980: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
a990: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
a9a0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
a9b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
a9c0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
a9d0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
a9e0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
a9f0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
aa00: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
aa10: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
aa20: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
aa30: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
aa40: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
aa50: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
aa60: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
aa70: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
aa80: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
aa90: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
aaa0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
aab0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
aac0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
aad0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
aae0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
aaf0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
ab00: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
ab10: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
ab20: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
ab30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
ab40: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
ab50: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
ab60: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
ab70: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
ab80: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
ab90: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
aba0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
abb0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
abc0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
abd0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
abe0: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
abf0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
ac00: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
ac10: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
ac20: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
ac30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ac40: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
ac50: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
ac60: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
ac70: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
ac80: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
ac90: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
aca0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
acb0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
acc0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
acd0: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
ace0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
acf0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
ad00: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
ad10: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
ad20: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
ad30: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
ad40: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
ad50: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
ad60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ad70: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
ad80: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
ad90: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
ada0: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
adb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
adc0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
add0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
ade0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
adf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
ae00: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
ae10: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
ae20: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
ae30: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
ae40: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
ae50: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
ae60: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
ae70: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
ae80: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
ae90: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
aea0: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
aeb0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
aec0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
aed0: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
aee0: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
aef0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
af00: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
af10: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
af20: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
af30: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
af40: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
af50: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
af60: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
af70: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
af80: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
af90: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
afa0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
afb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
afc0: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
afd0: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
afe0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
aff0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b000: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
b010: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
b020: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
b030: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
b040: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
b050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
b060: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
b070: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
b080: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
b090: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
b0a0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
b0b0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
b0c0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
b0d0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
b0e0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
b0f0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
b100: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
b110: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
b120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b130: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
b140: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
b150: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
b160: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
b170: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b180: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
b190: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b1a0: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
b1b0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
b1c0: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
b1d0: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
b1e0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
b1f0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
b200: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
b210: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
b220: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
b230: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b240: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
b250: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
b260: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
b270: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
b280: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
b290: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
b2a0: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
b2b0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
b2c0: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
b2d0: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
b2e0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
b2f0: 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78  STER .  ** mutex
b300: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
b310: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
b320: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
b330: 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a   notify.c. .  **
b340: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
b350: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
b360: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
b370: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
b380: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
b390: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
b3a0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
b3b0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
b3c0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
b3d0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
b3e0: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
b3f0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
b400: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
b410: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
b420: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
b430: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
b440: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
b450: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
b460: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
b470: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
b480: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
b490: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
b4a0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
b4b0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
b4c0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
b4d0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
b4e0: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
b4f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
b500: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
b510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b520: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
b530: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
b540: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
b550: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
b560: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
b570: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
b580: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
b590: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
b5a0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
b5b0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
b5c0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
b5d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
b5e0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b5f0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
b600: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
b610: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b620: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
b630: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
b640: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
b650: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
b660: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
b670: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
b680: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
b690: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
b6a0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
b6b0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
b6c0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
b6d0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
b6e0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
b6f0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
b700: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
b710: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
b720: 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  e      0x0000000
b730: 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  1  /* True to tr
b740: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
b750: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
b760: 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
b770: 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20 20  es  0x00000002  
b780: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
b790: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
b7a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b7b0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
b7c0: 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f     0x00000004  /
b7d0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
b7e0: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
b7f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b800: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
b810: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
b820: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
b830: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
b840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b850: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30  CacheSpill     0
b860: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b  x00000010  /* OK
b870: 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20   to spill pager 
b880: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
b890: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
b8a0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 32  ames   0x0000002
b8b0: 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  0  /* Show full 
b8c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
b8d0: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
b8e0: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
b8f0: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
b900: 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  40  /* Show shor
b910: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
b920: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b930: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
b940: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
b950: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
b960: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
b970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b990: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
b9a0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
b9b0: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
b9f0: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
ba00: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
ba10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
ba20: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
ba30: 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b  000100  /* Invok
ba40: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
ba50: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba80: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
ba90: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
baa0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bab0: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
bac0: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a    0x00000200  /*
bad0: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
bae0: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
baf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb00: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
bb10: 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20   0x00000400  /* 
bb20: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
bb30: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
bb40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb50: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
bb60: 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20   0x00000800  /* 
bb70: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
bb80: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
bb90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
bba0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30  eAddopTrace 0x00
bbb0: 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65  001000  /* Trace
bbc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bbd0: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
bbe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
bbf0: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
bc00: 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  02000  /* Do not
bc10: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
bc20: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
bc30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
bc40: 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30  dUncommitted 0x0
bc50: 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73  004000  /* For s
bc60: 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
bc70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bc80: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
bc90: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
bca0: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
bcb0: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
bcc0: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
bcd0: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
bce0: 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f     0x00010000  /
bcf0: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
bd00: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
bd10: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
bd20: 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30 30  Order   0x000200
bd30: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
bd40: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
bd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bd60: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
bd70: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
bd80: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
bd90: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
bda0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
bdb0: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
bdc0: 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  080000  /* Enfor
bdd0: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
bde0: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
bdf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
be00: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
be10: 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0100000  /* Enab
be20: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
be30: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
be40: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
be50: 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30 30  ltin  0x00200000
be60: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
be70: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
be80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
be90: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
bea0: 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  n  0x00400000  /
beb0: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
bec0: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
bed0: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
bee0: 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30 30  Trigger  0x00800
bef0: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
bf00: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
bf10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bf20: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
bf30: 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20   0x01000000  /* 
bf40: 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e  Defer all FK con
bf50: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
bf60: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
bf70: 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30 30  Only      0x0200
bf80: 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65  0000  /* Disable
bf90: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
bfa0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bfb0: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
bfc0: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
bfd0: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
bfe0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64  QUERY PLAN */.#d
bff0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63  efine SQLITE_Vac
c000: 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 38  uum         0x08
c010: 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65  000000  /* Curre
c020: 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d  ntly in a VACUUM
c030: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c040: 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20  TE_CellSizeCk   
c050: 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a    0x10000000  /*
c060: 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c   Check btree cel
c070: 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20  l sizes on load 
c080: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20  */.../*.** Bits 
c090: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
c0a0: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
c0b0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
c0c0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
c0d0: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
c0e0: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
c0f0: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
c100: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
c110: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
c120: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
c130: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
c140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
c150: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
c160: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
c170: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
c180: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
c190: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
c1a0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
c1b0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
c1c0: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
c1d0: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
c1e0: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
c1f0: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
c200: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
c210: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
c220: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
c230: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20  actoring */./*  
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
c250: 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30  t used    0x0010
c260: 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54     // Was: SQLIT
c270: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a  E_IdxRealAsInt *
c280: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c290: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
c2a0: 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54  0x0020   /* DIST
c2b0: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
c2c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c2d0: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
c2e0: 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20  n   0x0040   /* 
c2f0: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
c300: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
c310: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
c320: 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f  xJoin 0x0080   /
c330: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
c340: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
c350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c360: 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30  SubqCoroutine  0
c370: 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75  x0100   /* Evalu
c380: 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61  ate subqueries a
c390: 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a  s coroutines */.
c3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
c3b0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
c3c0: 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0200   /* Transi
c3d0: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
c3e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c3f0: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
c400: 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d    0x0400   /* Om
c410: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
c420: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
c430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
c440: 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30  34         0x080
c450: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33  0   /* Use STAT3
c460: 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a   or STAT4 data *
c470: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c480: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
c490: 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20  0x2000   /* Add 
c4a0: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
c4b0: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
c4c0: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
c4d0: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
c4e0: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
c4f0: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
c500: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
c510: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c520: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
c530: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
c540: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
c550: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
c560: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
c570: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c580: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
c590: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
c5a0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
c5b0: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
c5c0: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
c5d0: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
c5e0: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
c5f0: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
c600: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
c610: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
c620: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
c630: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
c640: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
c650: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
c660: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
c670: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
c680: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
c690: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
c6a0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
c6b0: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
c6c0: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
c6d0: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
c6e0: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
c6f0: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
c700: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
c710: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
c720: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c730: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
c740: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
c750: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
c760: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
c770: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
c780: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
c790: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
c7a0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
c7b0: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
c7c0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
c7d0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
c7e0: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
c7f0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
c800: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
c810: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
c820: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
c830: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
c840: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
c850: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c860: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
c870: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
c880: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
c890: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c8a0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
c8b0: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
c8c0: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
c8d0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
c8e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c8f0: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
c900: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
c910: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
c920: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
c930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c940: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
c950: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
c960: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
c970: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
c980: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
c990: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
c9a0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
c9b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
c9c0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
c9d0: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
c9e0: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
c9f0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
ca00: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
ca10: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
ca20: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
ca30: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
ca40: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
ca50: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
ca60: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
ca70: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
ca80: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
ca90: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
caa0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
cab0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
cac0: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
cad0: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
cae0: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
caf0: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
cb00: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
cb10: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
cb20: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
cb30: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
cb40: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
cb50: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
cb60: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
cb70: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
cb80: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
cb90: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
cba0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
cbb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
cbc0: 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63   /* Regular func
cbd0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
cbe0: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
cbf0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
cc00: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
cc10: 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70  * Aggregate step
cc20: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
cc30: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
cc40: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
cc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
cc60: 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72  regate finalizer
cc70: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
cc80: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
cc90: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
cca0: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e  nction. */.  Fun
ccb0: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
ccc0: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
ccd0: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
cce0: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
ccf0: 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72  h */.  FuncDestr
cd00: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
cd10: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
cd20: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
cd30: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
cd40: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
cd50: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
cd60: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
cd70: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
cd80: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
cd90: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
cda0: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
cdb0: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
cdc0: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
cdd0: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
cde0: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
cdf0: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
ce00: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
ce10: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
ce20: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
ce30: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
ce40: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
ce50: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
ce60: 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a  Ref is set to .*
ce70: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
ce80: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ce90: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
cea0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
ceb0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
cec0: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
ced0: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
cee0: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
cef0: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
cf00: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
cf10: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
cf20: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
cf30: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
cf40: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
cf50: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
cf60: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
cf70: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
cf80: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
cf90: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
cfa0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
cfb0: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
cfc0: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
cfd0: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
cfe0: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
cff0: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
d000: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
d010: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
d020: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
d030: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
d040: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
d050: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
d060: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
d070: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
d080: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
d090: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d0a0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
d0b0: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
d0c0: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
d0d0: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
d0e0: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
d0f0: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
d100: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
d110: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68  G_TYPEOFARG.  Th
d120: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
d130: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
d140: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
d150: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64  rify this..*/.#d
d160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d170: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
d180: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
d190: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
d1a0: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
d1b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d1c0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
d1d0: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
d1e0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
d1f0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
d200: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d210: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
d220: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
d230: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
d240: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d250: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
d260: 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
d270: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
d280: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
d290: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d2a0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
d2b0: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
d2c0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
d2d0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
d2e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d2f0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
d300: 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
d310: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
d320: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d330: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
d340: 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
d350: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
d360: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
d370: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d380: 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
d390: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
d3a0: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
d3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d3c0: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
d3d0: 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
d3e0: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
d3f0: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
d400: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
d410: 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
d420: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
d430: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
d440: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d450: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
d460: 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
d470: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
d480: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
d490: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d4a0: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
d4b0: 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
d4c0: 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
d4d0: 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
d4e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d4f0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
d500: 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
d510: 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
d520: 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
d560: 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
d570: 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 0a  e over time */..
d580: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
d590: 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
d5a0: 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
d5b0: 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
d5c0: 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
d5d0: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
d5e0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
d5f0: 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
d600: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
d610: 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
d620: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d630: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
d640: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
d650: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
d660: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
d670: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
d680: 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65  me .**     imple
d690: 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63  mented by C func
d6a0: 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20  tion xFunc that 
d6b0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
d6c0: 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20  uments. The.**  
d6d0: 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20     value passed 
d6e0: 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20  as iArg is cast 
d6f0: 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64  to a (void*) and
d700: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a   made available.
d710: 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73  **     as the us
d720: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
d730: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f  _user_data()) fo
d740: 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  r the function. 
d750: 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d  If .**     argum
d760: 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c  ent bNC is true,
d770: 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   then the SQLITE
d780: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66  _FUNC_NEEDCOLL f
d790: 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a  lag is set..**.*
d7a0: 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   VFUNCTION(zN
d7b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d7c0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
d7d0: 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
d7e0: 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
d7f0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
d800: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e  C_CONSTANT flag.
d810: 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49  .**.**   DFUNCTI
d820: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
d830: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
d840: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
d850: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
d860: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
d870: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
d880: 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20  flag and.**     
d890: 61 64 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f  adds the SQLITE_
d8a0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61  FUNC_SLOCHNG fla
d8b0: 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61 74  g.  Used for dat
d8c0: 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  e & time functio
d8d0: 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75  ns.**     and fu
d8e0: 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c  nctions like sql
d8f0: 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68  ite_version() th
d900: 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62  at can change, b
d910: 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a  ut not during.**
d920: 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75       a single qu
d930: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47  ery..**.**   AGG
d940: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
d950: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d960: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a  Step, xFinal).**
d970: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
d980: 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
d990: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
d9a0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
d9b0: 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
d9c0: 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
d9d0: 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
d9e0: 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
d9f0: 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
da00: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
da10: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
da20: 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
da30: 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
da40: 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
da50: 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
da60: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
da70: 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
da80: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
da90: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
daa0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
dab0: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
dac0: 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63  .**     that acc
dad0: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
dae0: 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65  nts and is imple
daf0: 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c  mented by a call
db00: 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75   to C .**     fu
db10: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
db20: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
db30: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
db40: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
db50: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
db60: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
db70: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
db80: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
db90: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
dba0: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
dbb0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
dbc0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
dbd0: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
dbe0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
dbf0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
dc00: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
dc10: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
dc20: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
dc30: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
dc40: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dc50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dc60: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
dc70: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
dc80: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
dc90: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dca0: 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43  0}.#define VFUNC
dcb0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
dcc0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dcd0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
dce0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dcf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dd00: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
dd10: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
dd20: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
dd30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dd40: 30 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43  0}.#define DFUNC
dd50: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
dd60: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dd70: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
dd80: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
dd90: 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
dda0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
ddb0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
ddc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
ddd0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
dde0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
ddf0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
de00: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
de10: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
de20: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
de30: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51  gs) \.  {nArg,SQ
de40: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
de50: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
de60: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
de70: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
de80: 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45  lags,\.   SQLITE
de90: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
dea0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
deb0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
dec0: 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
ded0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
dee0: 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
def0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
df00: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
df10: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
df20: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
df30: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
df40: 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
df50: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
df60: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  , 0}.#define LIK
df70: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
df80: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
df90: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
dfa0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
dfb0: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
dfc0: 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
dfd0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
dfe0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
dff0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
e000: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
e010: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
e020: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
e030: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
e040: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
e050: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
e060: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e070: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
e080: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
e090: 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e  Name,0,0}.#defin
e0a0: 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
e0b0: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
e0c0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
e0d0: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
e0e0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
e0f0: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
e100: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
e110: 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
e120: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e130: 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53  R(arg), 0, 0, xS
e140: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
e150: 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  e,0,0}../*.** Al
e160: 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
e170: 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
e180: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
e190: 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
e1a0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
e1b0: 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
e1c0: 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
e1d0: 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
e1e0: 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
e1f0: 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
e200: 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
e210: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
e220: 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
e230: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
e240: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
e250: 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
e260: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
e290: 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
e2a0: 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
e2b0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e2d0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
e2e0: 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
e2f0: 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  s */.  i64 nDefe
e300: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
e310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
e320: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
e330: 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61   imm fk. */.  Sa
e340: 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e360: 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
e370: 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
e380: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
e390: 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
e3a0: 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
e3b0: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
e3c0: 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
e3d0: 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
e3e0: 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
e3f0: 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
e400: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
e410: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
e420: 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
e430: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
e440: 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
e450: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
e460: 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
e470: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
e480: 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
e490: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
e4a0: 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
e4b0: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
e4c0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e4d0: 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
e4e0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
e4f0: 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
e500: 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
e510: 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
e520: 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
e530: 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
e540: 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
e550: 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
e560: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e580: 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
e590: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
e5a0: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
e5b0: 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e5d0: 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
e5e0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
e5f0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
e600: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
e610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
e620: 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
e630: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
e640: 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e660: 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
e670: 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
e680: 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
e690: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
e6a0: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
e6b0: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
e6c0: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
e6d0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
e6e0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
e6f0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
e700: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
e710: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
e720: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
e730: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
e740: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
e750: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
e760: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
e770: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
e780: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
e790: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
e7a0: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
e7b0: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
e7c0: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
e7d0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
e7e0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
e7f0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
e800: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
e810: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
e820: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
e830: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
e840: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
e850: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
e860: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
e870: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
e880: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
e890: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
e8a0: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
e8b0: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
e8c0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
e8d0: 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20   INT==1 */.  u8 
e8e0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
e8f0: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
e900: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
e910: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
e920: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
e930: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
e940: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
e950: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
e960: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
e970: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
e980: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
e990: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
e9a0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
e9b0: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
e9c0: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
e9d0: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
e9e0: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
e9f0: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
ea00: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
ea10: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
ea20: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
ea30: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
ea40: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
ea50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ea60: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
ea70: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
ea80: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
ea90: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
eaa0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
eab0: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
eac0: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
ead0: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
eae0: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
eaf0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
eb00: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
eb10: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
eb20: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
eb30: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
eb40: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
eb50: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
eb60: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
eb70: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
eb80: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
eb90: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
eba0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
ebb0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
ebc0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
ebd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
ebe0: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
ebf0: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
ec00: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
ec10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ec20: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
ec30: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
ec40: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
ec50: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
ec60: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
ec70: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
ec80: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
ec90: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
eca0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
ecb0: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
ecc0: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
ecd0: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
ece0: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
ecf0: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
ed00: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
ed10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed20: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
ed30: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
ed40: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
ed50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ed60: 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
ed70: 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
ed80: 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
ed90: 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
eda0: 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
edb0: 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
edc0: 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
edd0: 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
ede0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
edf0: 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
ee00: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
ee10: 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
ee20: 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
ee30: 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
ee40: 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
ee50: 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
ee60: 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
ee70: 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a  secutively.  .**
ee80: 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74  .** But rather t
ee90: 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30  han start with 0
eea0: 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20   or 1, we begin 
eeb0: 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20  with 'A'.  That 
eec0: 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c  way,.** when mul
eed0: 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74  tiple affinity t
eee0: 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65  ypes are concate
eef0: 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72  nated into a str
ef00: 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20  ing and.** used 
ef10: 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  as the P4 operan
ef20: 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  d, they will be 
ef30: 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a  more readable..*
ef40: 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74  *.** Note also t
ef50: 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20  hat the numeric 
ef60: 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65  types are groupe
ef70: 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68  d together so th
ef80: 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f  at testing.** fo
ef90: 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65  r a numeric type
efa0: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d   is a single com
efb0: 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68  parison.  And th
efc0: 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66  e BLOB type is f
efd0: 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  irst..*/.#define
efe0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
eff0: 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65       'A'.#define
f000: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f010: 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65       'B'.#define
f020: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
f030: 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65  RIC  'C'.#define
f040: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
f050: 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65  GER  'D'.#define
f060: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
f070: 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e       'E'..#defin
f080: 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
f090: 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
f0a0: 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
f0b0: 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
f0c0: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
f0d0: 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
f0e0: 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
f0f0: 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
f100: 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
f110: 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e. .*/.#define S
f120: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
f130: 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
f140: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
f150: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
f160: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
f170: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
f180: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
f190: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
f1a0: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
f1b0: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
f1c0: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
f1d0: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
f1e0: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
f1f0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
f200: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
f210: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
f220: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
f230: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
f240: 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
f250: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
f260: 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
f270: 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
f280: 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
f290: 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
f2a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
f2b0: 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
f2c0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
f2d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f2e0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
f2f0: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
f300: 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
f310: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
f320: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
f330: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
f340: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
f350: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
f360: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
f370: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
f380: 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
f390: 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
f3a0: 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
f3b0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
f3c0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
f3d0: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
f3e0: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
f3f0: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
f400: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
f410: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
f420: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
f430: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
f440: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
f450: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
f460: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
f470: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
f480: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
f490: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
f4a0: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
f4b0: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
f4c0: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
f4d0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f4e0: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
f4f0: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
f500: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
f510: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
f520: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
f530: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
f540: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
f550: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
f560: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
f570: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
f580: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
f590: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
f5a0: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
f5b0: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
f5c0: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
f5d0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
f5e0: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
f5f0: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
f600: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
f610: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
f620: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
f630: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
f640: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
f650: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
f660: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
f670: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
f680: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
f690: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
f6a0: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
f6b0: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
f6c0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
f6d0: 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
f6e0: 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a  ss real tables .
f6f0: 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
f700: 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
f710: 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
f720: 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
f730: 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  rs .** transacti
f740: 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
f750: 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
f760: 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
f770: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e  database .** con
f780: 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
f790: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
f7a0: 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
f7b0: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
f7c0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
f7d0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
f7e0: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
f7f0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
f800: 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
f810: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
f820: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
f830: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
f840: 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
f850: 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
f860: 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
f870: 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
f880: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
f890: 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
f8a0: 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
f8b0: 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
f8c0: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
f8d0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
f8e0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
f8f0: 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
f900: 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
f910: 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
f920: 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
f930: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f940: 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
f950: 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
f960: 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
f970: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
f980: 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
f990: 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
f9a0: 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
f9b0: 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
f9c0: 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
f9d0: 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
f9e0: 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
f9f0: 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
fa00: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
fa10: 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
fa20: 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20  cts are not .** 
fa30: 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
fa40: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
fa50: 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
fa60: 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a  isconnect()ed .*
fa70: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
fa80: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
fa90: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
faa0: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
fab0: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
fac0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
fad0: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
fae0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
faf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
fb00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
fb10: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
fb20: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
fb30: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
fb40: 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69  cted .** next ti
fb50: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
fb60: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
fb70: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
fb80: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
fb90: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
fba0: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
fbb0: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
fbc0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
fbd0: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
fbe0: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
fbf0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
fc00: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
fc10: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
fc20: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
fc30: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
fc40: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
fc50: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
fc60: 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
fc70: 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
fc80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
fc90: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
fca0: 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
fcb0: 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
fcc0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
fcd0: 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
fce0: 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44   by .** sqlite3D
fcf0: 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
fd00: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
fd10: 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
fd20: 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a   VTable.db as .*
fd30: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
fd40: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
fd50: 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
fd60: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
fd70: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
fd80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
fd90: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
fda0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
fdb0: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
fdc0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
fdd0: 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
fde0: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
fdf0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
fe00: 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
fe10: 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
fe20: 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
fe30: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
fe40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fe50: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
fe60: 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
fe70: 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
fe80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
fe90: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
fea0: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
feb0: 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
fec0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
fed0: 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
fee0: 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
fef0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
ff00: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
ff10: 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
ff20: 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
ff30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
ff40: 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63  e schema for eac
ff50: 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20  h SQL table and 
ff60: 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e  view is represen
ff70: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
ff80: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
ff90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
ffa0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
ffb0: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
ffc0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
ffd0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
ffe0: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
fff0: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
10000 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
10010 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10020 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
10030 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
10040 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
10050 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
10060 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
10070 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
10080 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
10090 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
100a0 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
100b0 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
100c0 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
100d0 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
100e0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
100f0 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
10100 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
10110 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
10120 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
10130 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
10140 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
10150 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
10160 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
10170 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
10180 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ts */.          
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
101a0 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20    ... also used 
101b0 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c  as column name l
101c0 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f  ist in a VIEW */
101d0 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
101e0 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
101f0 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  BTree page for t
10200 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  his table */.  i
10210 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
10220 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
10230 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
10240 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
10250 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
10260 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
10270 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10280 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
10290 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
102a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
102b0 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
102c0 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
102d0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
102e0 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
102f0 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
10300 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
10310 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
10320 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
10330 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
10340 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
10350 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
10360 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
10370 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
10380 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
10390 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
103a0 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
103b0 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
103c0 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
103d0 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
103e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
103f0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
10400 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
10410 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
10420 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
10430 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
10440 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
10450 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10460 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
10470 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
10480 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
10490 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
104a0 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
104b0 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
104c0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
104d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
104e0 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
104f0 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
10500 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
10510 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
10520 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
10530 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a  oduleArg;  /* 0:
10540 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d   module 1: schem
10550 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33  a 2: vtab name 3
10560 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56  ...: args */.  V
10570 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
10580 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
10590 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
105a0 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
105b0 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
105c0 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
105d0 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
105e0 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
105f0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10600 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
10610 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
10620 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
10630 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
10640 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
10650 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
10660 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
10670 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10680 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
10690 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69  ..**.** TF_OOOHi
106a0 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  dden applies to 
106b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
106c0 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20  hat have hidden 
106d0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
106e0 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  .** followed by 
106f0 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10700 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22  ns.  Example:  "
10710 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10720 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20  ABLE x USING.** 
10730 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20  vtab1(a HIDDEN, 
10740 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22  b);".  Since "b"
10750 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e   is a non-hidden
10760 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20   column but "a" 
10770 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68  is hidden,.** th
10780 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  e TF_OOOHidden a
10790 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61  ttribute would a
107a0 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73  pply in this cas
107b0 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20  e.  Such tables 
107c0 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69  require.** speci
107d0 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69  al handling duri
107e0 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73  ng INSERT proces
107f0 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  sing..*/.#define
10800 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
10810 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
10820 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
10830 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
10840 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
10850 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
10860 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
10870 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
10880 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
10890 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
108a0 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
108b0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
108c0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
108d0 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
108e0 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
108f0 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
10900 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
10910 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
10920 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
10930 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
10940 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
10950 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
10960 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
10970 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
10980 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
10990 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
109a0 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a  owid  0x40    /*
109b0 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
109c0 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
109d0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
109e0 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
109f0 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
10a00 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
10a10 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  umns */.../*.** 
10a20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
10a30 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
10a40 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
10a50 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
10a60 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
10a70 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
10a80 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
10a90 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
10aa0 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
10ab0 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
10ac0 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
10ad0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10ae0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
10af0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
10b00 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
10b10 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
10b20 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
10b30 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
10b40 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
10b50 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
10b60 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
10b70 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
10b80 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
10b90 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
10ba0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10bb0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f   0.#endif../* Do
10bc0 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
10bd0 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
10be0 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
10bf0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
10c00 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
10c10 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
10c20 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
10c30 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
10c40 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
10c50 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
10c60 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
10c70 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
10c80 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
10c90 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10ca0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
10cb0 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
10cc0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
10cd0 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
10ce0 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
10cf0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
10d00 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
10d10 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10d20 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
10d30 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10d40 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
10d50 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
10d60 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
10d70 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
10d80 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
10d90 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
10da0 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
10db0 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
10dc0 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
10dd0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
10de0 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
10df0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
10e00 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
10e10 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
10e20 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
10e30 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
10e40 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
10e50 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
10e60 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
10e70 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
10e80 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
10e90 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
10ea0 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
10eb0 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
10ec0 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
10ed0 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
10ee0 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
10ef0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10f00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10f10 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
10f20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
10f30 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
10f40 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
10f50 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
10f60 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
10f70 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
10f80 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
10f90 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10fa0 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
10fb0 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
10fc0 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
10fd0 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
10fe0 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
10ff0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
11000 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
11010 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
11020 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
11030 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
11040 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
11050 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
11060 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
11070 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
11080 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
11090 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
110a0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
110b0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
110c0 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
110d0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
110e0 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
110f0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
11100 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
11110 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
11120 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
11130 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11140 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
11150 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
11160 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
11170 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
11180 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
11190 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
111a0 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
111b0 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
111c0 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
111d0 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
111e0 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
111f0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
11200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
11210 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
11220 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
11230 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
11240 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
11250 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
11260 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
11270 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
11280 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
11290 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
112a0 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
112b0 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
112c0 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
112d0 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
112e0 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
112f0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
11300 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
11310 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
11320 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
11330 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
11340 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
11350 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
11360 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
11370 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11380 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
11390 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
113a0 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
113b0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
113c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
113d0 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
113e0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
113f0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
11400 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
11410 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
11420 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
11430 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
11440 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
11450 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
11460 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
11470 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
11480 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
11490 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
114a0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
114b0 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
114c0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
114d0 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
114e0 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
114f0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
11500 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
11510 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
11520 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
11530 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
11540 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
11550 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
11560 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
11570 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
11580 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
11590 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
115a0 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
115b0 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
115c0 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
115d0 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
115e0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
115f0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
11600 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
11610 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
11620 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
11630 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
11640 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
11650 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
11660 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
11670 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
11680 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
11690 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
116a0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
116b0 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
116c0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
116d0 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
116e0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
116f0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
11700 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
11710 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
11720 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
11730 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
11740 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
11750 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
11760 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
11770 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
11780 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
11790 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
117a0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
117b0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
117c0 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
117d0 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
117e0 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
117f0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
11800 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
11810 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
11820 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
11830 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
11840 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
11850 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
11860 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
11870 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
11880 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
11890 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
118a0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
118b0 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
118c0 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
118d0 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
118e0 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
118f0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
11900 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
11910 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
11920 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
11930 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
11940 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11950 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
11960 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
11970 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
11980 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
11990 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
119a0 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
119b0 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
119c0 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
119d0 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
119e0 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
119f0 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
11a00 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
11a10 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
11a20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
11a30 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
11a40 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
11a50 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
11a60 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
11a70 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
11a80 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
11a90 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
11aa0 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
11ab0 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
11ac0 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
11ad0 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
11ae0 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
11af0 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
11b00 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
11b10 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
11b20 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
11b30 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
11b40 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
11b50 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
11b60 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
11b70 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
11b80 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
11b90 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
11ba0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
11bb0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
11bc0 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
11bd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11be0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
11bf0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
11c00 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
11c10 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11c20 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
11c30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
11c40 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
11c50 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
11c60 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
11c70 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
11c80 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
11c90 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
11ca0 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
11cb0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11cc0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11cd0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
11ce0 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
11cf0 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11d00 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
11d10 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
11d20 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
11d30 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
11d40 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
11d50 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
11d60 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
11d70 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
11d80 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
11d90 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
11da0 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
11db0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
11dc0 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
11dd0 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
11de0 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
11df0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
11e00 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
11e10 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
11e20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11e30 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
11e40 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
11e50 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
11e60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
11e70 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
11e80 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
11e90 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
11ea0 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
11eb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11ec0 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
11ed0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
11ee0 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
11ef0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11f00 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
11f10 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
11f20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
11f30 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
11f40 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11f50 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
11f60 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
11f70 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
11f80 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
11f90 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
11fa0 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
11fb0 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
11fc0 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
11fd0 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
11fe0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11ff0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
12000 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
12010 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
12020 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
12030 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
12040 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
12050 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
12060 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
12070 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
12080 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
12090 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
120a0 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
120b0 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
120c0 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
120d0 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
120e0 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
120f0 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
12100 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
12110 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
12120 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
12130 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
12140 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
12150 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
12160 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
12170 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
12180 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
12190 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
121a0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
121b0 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
121c0 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
121d0 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
121e0 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
121f0 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
12200 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
12210 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
12220 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
12230 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
12240 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
12250 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
12260 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
12270 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
12280 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
12290 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
122a0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
122b0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
122c0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
122d0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
122e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
122f0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
12300 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12310 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
12320 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
12330 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
12340 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
12350 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
12360 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
12370 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
12380 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
12390 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
123a0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
123b0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
123c0 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
123d0 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
123e0 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
123f0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
12400 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
12410 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12430 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
12440 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
12450 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
12460 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
12470 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
12480 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
12490 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
124a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
124b0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
124c0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
124d0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
124e0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
124f0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
12500 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
12510 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
12520 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
12530 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
12540 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
12550 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
12560 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
12570 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
12580 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
12590 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
125a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
125b0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
125c0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
125d0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
125e0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
125f0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
12600 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
12610 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
12620 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
12630 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
12640 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
12650 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
12660 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
12670 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
12680 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
12690 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
126a0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
126b0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
126c0 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
126d0 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
126e0 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
126f0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
12700 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
12710 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
12720 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
12730 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
12740 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
12750 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
12760 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
12770 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
12780 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
12790 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
127a0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
127b0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
127c0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
127d0 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
127e0 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
127f0 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
12800 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
12810 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
12820 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
12830 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
12840 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
12850 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
12860 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
12870 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
12880 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
12890 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
128a0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
128b0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
128c0 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
128d0 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
128e0 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
128f0 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
12900 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
12910 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
12920 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
12930 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
12940 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
12950 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
12960 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
12970 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
12980 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
12990 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
129a0 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
129b0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
129c0 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
129d0 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
129e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
129f0 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
12a00 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
12a10 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
12a20 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
12a30 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
12a40 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
12a50 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
12a60 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
12a70 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
12a80 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
12a90 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
12aa0 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
12ab0 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
12ac0 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
12ad0 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
12ae0 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
12af0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
12b00 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
12b10 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12b30 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
12b40 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
12b50 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
12b60 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
12b70 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
12b80 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
12b90 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
12ba0 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
12bb0 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
12bc0 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
12bd0 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
12be0 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
12bf0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
12c00 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
12c10 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
12c20 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
12c30 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
12c40 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
12c50 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
12c60 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
12c70 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
12c80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12c90 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
12ca0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
12cb0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
12cc0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
12cd0 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
12ce0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
12cf0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12d00 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
12d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
12d20 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
12d30 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
12d40 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
12d50 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
12d60 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
12d70 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
12d80 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
12d90 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
12da0 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
12db0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
12dc0 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
12dd0 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ces */.  ExprLis
12de0 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20  t *aColExpr;    
12df0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72    /* Column expr
12e00 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
12e10 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
12e20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
12e30 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
12e40 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
12e50 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
12e60 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
12e70 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
12e80 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
12e90 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
12ea0 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
12eb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12ec0 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
12ed0 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
12ee0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
12ef0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12f00 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
12f10 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
12f20 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
12f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
12f40 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
12f50 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
12f60 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
12f70 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
12f80 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
12f90 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
12fa0 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
12fb0 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
12fc0 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
12fd0 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
12fe0 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
12ff0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
13000 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
13010 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
13020 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
13030 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
13040 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
13050 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
13060 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
13070 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
13080 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
13090 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
130a0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
130b0 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
130c0 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
130d0 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
130e0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
130f0 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
13100 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
13110 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
13120 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  e */.#ifdef SQLI
13130 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
13140 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
13150 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
13160 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13170 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
13180 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
13190 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
131a0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
131b0 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
131c0 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
131d0 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
131e0 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
131f0 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
13200 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
13210 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
13220 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
13230 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
13240 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
13250 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
13260 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
13270 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
13280 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
13290 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
132a0 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
132b0 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
132c0 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
132d0 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
132e0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
132f0 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
13300 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
13310 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
13320 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
13330 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
13340 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
13350 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
13360 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
13370 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
13380 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
13390 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
133a0 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
133b0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
133c0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
133d0 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
133e0 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
133f0 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
13400 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
13410 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
13420 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
13430 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
13440 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
13450 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
13460 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
13470 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
13480 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
13490 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
134a0 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
134b0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
134c0 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
134d0 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
134e0 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
134f0 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
13500 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
13510 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
13520 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
13530 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
13540 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
13550 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
13560 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
13570 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
13580 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
13590 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
135a0 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
135b0 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
135c0 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
135d0 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
135e0 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
135f0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
13600 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
13610 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
13620 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
13630 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
13640 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
13650 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
13660 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
13670 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
13680 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
13690 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
136a0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
136b0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
136c0 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
136d0 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
136e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
136f0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
13700 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
13710 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
13720 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
13730 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
13740 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
13750 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
13760 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
13770 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
13780 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
13790 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
137a0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
137b0 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
137c0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
137d0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
137e0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
137f0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
13800 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
13810 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
13820 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
13830 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
13840 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
13850 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
13860 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
13870 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
13880 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
13890 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
138a0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
138b0 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
138c0 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
138d0 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
138e0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
138f0 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
13900 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
13910 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
13920 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
13930 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
13940 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
13950 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
13960 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
13970 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
13980 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
13990 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
139a0 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
139b0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
139c0 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
139d0 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
139e0 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
139f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
13a00 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
13a10 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
13a20 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
13a30 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
13a40 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
13a50 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
13a60 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
13a70 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
13a80 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
13a90 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
13aa0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
13ab0 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
13ac0 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
13ad0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
13ae0 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
13af0 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
13b00 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
13b10 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
13b20 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
13b30 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
13b40 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
13b50 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
13b60 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
13b70 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
13b80 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
13b90 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
13ba0 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
13bb0 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
13bc0 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
13bd0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
13be0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
13bf0 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
13c00 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
13c10 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
13c20 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
13c30 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
13c40 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
13c50 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
13c60 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
13c70 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
13c80 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
13c90 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
13ca0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
13cd0 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
13ce0 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
13cf0 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
13d00 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
13d10 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
13d20 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
13d30 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
13d40 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
13d70 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
13d80 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
13d90 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
13da0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
13db0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
13dc0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
13dd0 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
13de0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
13df0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
13e00 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
13e10 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
13e20 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13e30 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13e40 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
13e50 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
13e60 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
13e70 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
13e80 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
13e90 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
13ea0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
13eb0 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
13ec0 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
13ed0 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
13ee0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
13ef0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
13f00 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
13f10 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
13f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
13f30 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13f40 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
13f50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
13f60 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13f70 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
13f80 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
13f90 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
13fa0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
13fb0 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
13fc0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
13fd0 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
13fe0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
13ff0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
14000 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
14010 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
14040 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
14050 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
14060 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
14070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14080 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
14090 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
140a0 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
140b0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
140c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
140d0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
140e0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
140f0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
14100 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
14110 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
14120 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
14130 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
14160 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
14170 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
14180 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
141a0 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
141b0 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
141c0 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
141d0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
141e0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
141f0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
14200 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
14210 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
14220 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
14230 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
14240 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
14250 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
14260 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
14270 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
14280 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
142a0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
142b0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
142c0 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
142d0 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
142e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
142f0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
14300 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
14310 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
14320 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
14330 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
14340 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
14350 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
14360 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
14370 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
14380 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
14390 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
143a0 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
143b0 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
143c0 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
143d0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
143e0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
143f0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
14400 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
14410 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
14420 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
14430 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
14440 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
14450 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
14460 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
14470 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
14480 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
14490 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
144a0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
144b0 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
144c0 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
144d0 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
144e0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
144f0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
14500 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
14510 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
14520 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
14530 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
14540 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
14550 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
14560 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
14570 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
14580 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
14590 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
145a0 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
145b0 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
145c0 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
145d0 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
145e0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
145f0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
14600 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
14610 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
14620 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
14630 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14640 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
14650 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
14660 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
14670 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
14680 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
14690 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
146a0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
146b0 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
146c0 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
146d0 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
146e0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
146f0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
14700 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
14710 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
14720 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
14730 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
14740 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
14750 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
14760 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
14770 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14780 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
14790 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
147a0 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
147b0 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
147c0 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
147d0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
147e0 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
147f0 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
14800 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14810 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
14820 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
14830 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
14840 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
14850 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
14860 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
14870 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
14880 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
14890 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
148a0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
148b0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
148c0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
148d0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
148e0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
148f0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
14900 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
14910 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
14920 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
14930 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
14940 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
14950 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
14960 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
14970 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
14980 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
14990 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
149a0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
149b0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
149c0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
149d0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
149e0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
149f0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
14a00 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
14a10 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
14a20 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
14a30 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
14a40 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
14a50 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
14a60 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
14a70 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
14a80 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
14a90 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
14aa0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
14ab0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
14ac0 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
14ad0 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
14ae0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
14af0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
14b00 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
14b10 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
14b20 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
14b30 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
14b40 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
14b50 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
14b60 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
14b70 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
14b80 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
14b90 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
14ba0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
14bb0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
14bc0 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
14bd0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
14be0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
14bf0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
14c00 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
14c10 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
14c20 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
14c30 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
14c40 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
14c50 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
14c60 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
14c70 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
14c80 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
14c90 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
14ca0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
14cb0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
14cc0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
14cd0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
14ce0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
14cf0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
14d00 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
14d10 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
14d20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
14d30 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
14d40 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
14d50 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
14d60 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
14d70 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
14d80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
14d90 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
14da0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
14db0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
14dc0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
14dd0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14de0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
14df0 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
14e00 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
14e10 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
14e20 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
14e30 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
14e40 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
14e50 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
14e60 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
14e70 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
14e80 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
14e90 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
14ea0 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
14eb0 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
14ec0 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
14ed0 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
14ee0 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
14ef0 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
14f00 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
14f10 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
14f20 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
14f30 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
14f40 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
14f50 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
14f60 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
14f70 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
14f80 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
14f90 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
14fa0 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
14fb0 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
14fc0 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
14fd0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
14fe0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
14ff0 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
15000 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
15010 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
15020 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
15030 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
15040 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
15050 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
15060 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
15070 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
15080 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
15090 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
150a0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
150b0 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
150c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
150d0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
150e0 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
150f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
15100 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
15110 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15120 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
15130 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
15140 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
15150 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
15160 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
15170 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
15180 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
15190 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
151a0 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
151b0 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
151c0 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
151d0 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
151e0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
151f0 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
15200 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
15210 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
15220 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
15230 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
15240 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
15250 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
15260 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
15270 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
15280 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
15290 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
152b0 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
152c0 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
152d0 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
152e0 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
152f0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
15300 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
15310 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
15320 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
15330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15340 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
15350 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
15360 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
15370 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
15380 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
15390 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
153a0 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
153b0 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
153c0 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
153d0 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
153e0 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
153f0 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
15400 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
15410 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
15420 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
15430 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
15440 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
15450 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
15460 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
15470 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
15480 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
15490 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
154a0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
154b0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
154c0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
154d0 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
154e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
154f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
15520 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
15530 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
15540 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
15550 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
15560 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
15570 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
15580 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
15590 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
155a0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
155b0 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
155c0 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
155d0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
155e0 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
155f0 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
15600 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
15610 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
15620 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
15630 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
15640 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
15650 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
15660 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
15670 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
15680 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
15690 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
156a0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
156b0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
156c0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
156d0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
156e0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
156f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
15730 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
15740 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
15750 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
15760 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
15770 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
15780 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
15790 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
157a0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
157b0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
157c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
157d0 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
157e0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15800 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
15810 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
15840 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
15850 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
15880 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
15890 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
158a0 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
158b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
158c0 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
158d0 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
158e0 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15900 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
15910 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
15920 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
15930 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
15940 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
15950 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
15960 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
15970 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
15980 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
15990 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
159a0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
159b0 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
159c0 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
159f0 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
15a00 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
15a30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
15a40 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
15a70 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
15a80 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
15a90 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
15aa0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
15ab0 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
15ac0 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
15ad0 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
15ae0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
15af0 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
15b00 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
15b10 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
15b20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
15b30 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
15b40 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
15b50 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
15b60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
15b70 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
15b80 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
15b90 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
15ba0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
15bb0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
15bc0 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
15bd0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
15be0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
15bf0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
15c00 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
15c10 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
15c20 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
15c30 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
15c40 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
15c50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
15c60 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
15c70 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
15c80 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
15c90 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
15ca0 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
15cb0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
15cc0 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
15cd0 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
15ce0 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
15cf0 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
15d00 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
15d10 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
15d20 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
15d30 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
15d40 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
15d50 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
15d60 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
15d70 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
15d80 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
15d90 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
15da0 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
15db0 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
15dc0 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
15dd0 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
15de0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
15df0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
15e00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
15e10 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
15e20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
15e30 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
15e40 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
15e50 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
15e60 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
15e70 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
15e80 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
15e90 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
15ea0 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
15eb0 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
15ec0 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
15ed0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
15ee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
15ef0 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
15f00 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
15f10 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
15f20 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
15f30 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
15f40 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
15f50 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
15f60 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
15f70 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
15f80 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
15f90 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
15fa0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
15fb0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
15fc0 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
15fd0 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
15fe0 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
15ff0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
16000 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
16010 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
16020 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
16030 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
16040 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
16050 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
16060 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
16070 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
16080 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
16090 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
160a0 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
160b0 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
160c0 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
160d0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
160e0 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
160f0 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20  c 0x080000 /* A 
16100 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
16110 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
16120 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
16130 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
16140 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
16150 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
16160 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
16170 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16180 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
16190 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
161a0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
161b0 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
161c0 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
161d0 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a       0x400000 /*
161e0 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   Is an alias for
161f0 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f   a result set co
16200 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  lumn */../*.** C
16210 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
16220 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
16230 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
16240 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
16250 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
16260 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
16270 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
16280 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
16290 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
162a0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
162b0 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
162c0 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
162d0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
162e0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
162f0 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
16300 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
16310 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
16320 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
16330 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
16340 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
16350 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
16360 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
16370 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
16380 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
16390 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
163a0 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
163b0 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
163c0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
163d0 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
163e0 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
163f0 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
16400 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
16410 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
16420 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
16430 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
16440 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
16450 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
16460 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
16470 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
16480 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
16490 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
164a0 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
164b0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
164c0 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
164d0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
164e0 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
164f0 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
16500 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
16510 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
16520 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
16530 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  pr .** struct, a
16540 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
16550 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
16560 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
16570 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64  pr.flags .** and
16580 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
16590 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
165a0 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
165b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
165c0 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
165d0 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
165e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
165f0 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
16600 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
16610 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
16620 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
16630 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
16640 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
16650 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
16660 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
16670 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
16680 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
16690 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
166a0 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
166b0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
166c0 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
166d0 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
166e0 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
166f0 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
16700 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
16710 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
16720 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
16730 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
16740 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
16750 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
16760 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
16770 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
16780 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
16790 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
167a0 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
167b0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
167c0 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
167d0 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
167e0 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
167f0 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
16800 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
16810 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
16820 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
16830 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
16840 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
16850 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
16860 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
16870 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
16880 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
16890 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
168a0 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
168b0 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
168c0 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
168d0 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
168e0 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
168f0 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
16900 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
16910 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
16920 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
16930 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
16940 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
16950 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
16960 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
16970 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
16980 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
16990 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
169a0 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
169b0 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
169c0 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
169d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
169e0 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
169f0 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
16a00 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
16a10 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
16a20 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
16a30 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
16a40 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
16a50 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
16a60 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
16a70 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
16a80 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
16a90 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
16aa0 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
16ab0 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
16ac0 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
16ad0 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
16ae0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16af0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
16b00 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
16b10 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
16b20 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
16b30 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
16b40 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
16b50 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
16b60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16b70 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
16b80 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
16b90 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
16ba0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
16bb0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
16bc0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
16bd0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
16be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
16bf0 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
16c00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
16c10 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
16c20 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
16c30 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
16c40 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
16c50 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
16c60 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
16c70 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
16c80 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
16c90 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
16ca0 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
16cb0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
16cc0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
16cd0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
16ce0 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
16cf0 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
16d00 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
16d10 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
16d20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
16d30 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
16d40 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
16d50 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
16d60 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
16d70 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
16d80 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
16d90 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
16da0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
16db0 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
16dc0 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
16dd0 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
16de0 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
16df0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
16e00 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
16e10 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
16e20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
16e30 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
16e40 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20       /* Alloc a 
16e50 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65  power of two gre
16e60 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f  ater or equal to
16e70 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   nExpr */.};../*
16e80 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
16e90 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16ea0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
16eb0 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
16ec0 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
16ed0 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
16ee0 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
16ef0 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
16f00 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
16f10 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
16f20 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
16f30 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
16f40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16f50 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
16f60 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
16f70 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
16f80 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
16f90 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
16fa0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
16fb0 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
16fc0 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
16fd0 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
16fe0 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
16ff0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17000 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17010 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
17020 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
17030 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
17040 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
17050 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
17060 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
17070 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
17080 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
17090 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
170a0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
170b0 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
170c0 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
170d0 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
170e0 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
170f0 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
17100 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
17110 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
17120 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
17130 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
17140 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
17150 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
17160 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
17170 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
17180 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
17190 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
171a0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
171b0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
171c0 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
171d0 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
171e0 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
171f0 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
17200 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
17210 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
17220 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
17230 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17240 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
17250 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
17260 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
17270 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
17280 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
17290 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
172a0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
172b0 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
172c0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
172d0 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
172e0 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
172f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
17300 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
17310 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
17320 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
17330 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
17340 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
17350 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
17360 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
17370 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
17380 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
17390 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
173a0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
173b0 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
173c0 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
173d0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
173e0 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
173f0 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
17400 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
17410 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
17420 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
17430 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
17440 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
17450 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
17460 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
17470 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
17480 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
17490 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
174a0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
174b0 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
174c0 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
174d0 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
174e0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
174f0 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
17500 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
17510 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
17520 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
17530 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
17540 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
17550 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
17560 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
17570 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
17580 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
17590 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
175a0 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
175b0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
175c0 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
175d0 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
175e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
175f0 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
17600 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
17610 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
17620 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
17630 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
17640 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
17650 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
17660 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
17670 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
17680 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
17690 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
176a0 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
176b0 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
176c0 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
176d0 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
176e0 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
176f0 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
17700 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
17710 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
17720 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
17730 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
17740 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
17750 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
17760 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
17770 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
17780 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
17790 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
177a0 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
177b0 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
177c0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
177d0 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
177e0 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
177f0 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
17800 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
17810 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
17820 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
17830 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
17840 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
17850 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
17860 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
17870 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
17880 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
17890 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
178a0 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
178b0 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
178c0 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
178d0 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
178e0 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
178f0 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
17900 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17910 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
17920 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
17930 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
17940 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
17950 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17960 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
17970 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
17980 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
17990 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
179a0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
179b0 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
179c0 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
179d0 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
179e0 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
179f0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
17a00 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
17a10 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
17a20 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
17a30 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
17a40 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
17a50 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
17a60 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
17a70 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
17a80 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
17a90 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
17aa0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
17ab0 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
17ac0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
17ad0 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
17ae0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
17af0 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
17b00 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
17b10 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
17b20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
17b30 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
17b40 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
17b50 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
17b60 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
17b70 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
17b80 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
17b90 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
17ba0 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
17bb0 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
17bc0 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
17bd0 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
17be0 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
17bf0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
17c00 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
17c10 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
17c20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
17c30 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
17c40 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
17c50 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
17c60 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
17c70 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
17c80 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
17c90 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
17ca0 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
17cb0 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
17cc0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
17cd0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
17ce0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
17cf0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
17d00 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
17d10 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
17d20 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
17d30 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
17d40 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
17d50 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
17d60 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
17d70 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
17d80 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
17d90 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
17da0 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
17db0 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
17dc0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
17dd0 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
17de0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
17df0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
17e00 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
17e10 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23  H */.    } fg;.#
17e20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17e30 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
17e40 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
17e50 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
17e60 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
17e70 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
17e80 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
17e90 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
17ea0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
17eb0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
17ec0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
17ed0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
17ee0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
17ef0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
17f00 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
17f10 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
17f20 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
17f30 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
17f40 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
17f50 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
17f60 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
17f70 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
17f80 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
17f90 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
17fa0 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
17fb0 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
17fc0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
17fd0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
17fe0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
17ff0 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
18000 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
18010 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
18020 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
18030 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
18040 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
18050 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
18060 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
18070 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
18080 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
18090 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
180a0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
180b0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
180c0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
180d0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
180e0 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
180f0 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
18100 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
18110 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
18120 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
18130 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
18140 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
18150 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
18160 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
18170 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
18180 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
18190 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
181a0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
181b0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
181c0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
181d0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
181e0 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
181f0 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
18200 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
18210 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
18220 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
18230 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18240 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
18250 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
18260 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
18270 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
18280 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
18290 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
182a0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
182b0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
182c0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
182d0 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
182e0 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
182f0 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
18300 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
18310 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
18320 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
18330 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
18340 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
18350 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
18360 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
18370 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
18380 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
18390 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
183a0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
183b0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
183c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
183d0 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
183e0 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
183f0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
18400 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
18410 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
18420 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
18430 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
18440 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
18450 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
18460 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
18470 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
18480 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
18490 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
184a0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
184b0 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
184c0 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
184d0 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
184e0 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
184f0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
18500 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
18510 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
18520 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
18530 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
18540 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
18550 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
18560 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
18570 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
18580 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
18590 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e  .#define WHERE_N
185a0 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20  O_AUTOINDEX     
185b0 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c  0x0080 /* Disall
185c0 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  ow automatic ind
185d0 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
185e0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
185f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
18600 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
18610 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
18620 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18630 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
18640 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
18650 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
18660 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
18670 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18680 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
18690 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
186a0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
186b0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
186c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
186d0 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
186e0 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
186f0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
18700 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
18710 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
18720 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
18730 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
18740 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64  _ReopenIdx */.#d
18750 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
18760 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32  ASS_MULTIROW 0x2
18770 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  000 /* ONEPASS i
18780 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
18790 6c 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a 20 41  le rows */../* A
187a0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
187b0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
187c0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
187d0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
187e0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
187f0 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
18800 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
18810 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
18820 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18830 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
18840 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
18850 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18860 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
18870 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
18880 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
18890 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
188a0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
188b0 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
188c0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
188d0 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
188e0 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
188f0 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
18900 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
18910 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
18920 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
18930 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
18940 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
18950 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
18960 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
18970 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
18980 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
18990 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
189a0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
189b0 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
189c0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
189d0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
189e0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
189f0 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
18a00 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
18a10 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
18a20 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
18a30 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
18a40 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
18a50 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
18a60 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
18a70 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
18a80 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
18a90 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
18aa0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
18ab0 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
18ac0 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
18ad0 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
18ae0 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74  most .** context
18af0 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
18b00 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
18b10 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
18b20 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
18b30 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
18b40 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
18b50 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
18b60 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
18b70 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
18b80 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
18b90 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
18ba0 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
18bb0 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
18bc0 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
18bd0 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
18be0 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
18bf0 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
18c00 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
18c10 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
18c20 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
18c30 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62   .**.** Each sub
18c40 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
18c50 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
18c60 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
18c70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
18c80 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
18c90 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
18ca0 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
18cb0 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
18cc0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
18cd0 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
18ce0 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
18cf0 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
18d00 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
18d10 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
18d20 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
18d30 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
18d40 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
18d50 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
18d60 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
18d70 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
18d80 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
18d90 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
18da0 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
18db0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18dc0 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
18dd0 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
18de0 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
18df0 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
18e00 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
18e10 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
18e20 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
18e30 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
18e40 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
18e50 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
18e60 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
18e70 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
18e80 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
18e90 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
18ea0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
18eb0 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
18ec0 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
18ed0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
18ee0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18ef0 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
18f00 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
18f10 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
18f20 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  16 ncFlags;     
18f30 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
18f40 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
18f50 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
18f60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
18f70 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
18f80 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
18f90 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
18fa0 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e  ** Note:  NC_Min
18fb0 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76 65  MaxAgg must have
18fc0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
18fd0 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  as SF_MinMaxAgg 
18fe0 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55  and.** SQLITE_FU
18ff0 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a  NC_MINMAX..** .*
19000 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
19010 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
19020 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
19030 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
19040 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
19050 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
19060 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0002  /* One or
19070 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
19080 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
19090 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
190a0 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
190b0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
190c0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
190d0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
190e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
190f0 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
19100 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
19110 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
19120 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
19130 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
19140 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a  Idx   0x0010  /*
19150 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
19160 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
19170 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
19180 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
19190 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
191a0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
191b0 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
191c0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
191d0 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
191e0 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
191f0 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
19200 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
19210 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
19220 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19230 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19240 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
19250 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
19260 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
19270 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
19280 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
19290 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
192a0 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
192b0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
192c0 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
192d0 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
192e0 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
192f0 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
19300 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
19310 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
19320 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
19330 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
19340 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
19350 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
19360 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
19370 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
19380 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
19390 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
193a0 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
193b0 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
193c0 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
193d0 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
193e0 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
193f0 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
19400 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
19410 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
19420 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
19430 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
19440 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
19450 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
19460 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
19470 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
19480 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
19490 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
194a0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
194b0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
194c0 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
194d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
194e0 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
194f0 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
19500 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
19510 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
19520 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
19530 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
19540 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
19550 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
19560 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
19570 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
19580 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
19590 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
195a0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
195b0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
195c0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
195d0 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
195e0 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
195f0 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
19600 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
19610 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
19620 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
19630 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
19640 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
19650 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
19660 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
19670 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
19680 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
19690 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
196a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
196b0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
196c0 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
196d0 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
196e0 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
196f0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
19700 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
19710 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
19720 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
19730 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
19740 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
19750 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
19760 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
19770 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20  _ENABLED.  char 
19780 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20  zSelName[12];   
19790 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61    /* Symbolic na
197a0 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43  me of this SELEC
197b0 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67  T use for debugg
197c0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
197d0 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
197e0 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
197f0 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
19800 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
19810 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e  elect */.  u64 n
19820 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20  SelectRow;      
19830 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
19840 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
19850 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
19860 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
19870 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
19880 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
19890 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
198a0 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
198b0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
198c0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
198d0 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
198e0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
198f0 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
19900 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
19910 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
19920 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
19930 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
19940 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
19950 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
19960 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
19970 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
19980 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
19990 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
199a0 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
199b0 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
199c0 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
199d0 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
199e0 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
199f0 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
19a00 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
19a10 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
19a20 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
19a30 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
19a40 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
19a50 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
19a60 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
19a70 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
19a80 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
19a90 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
19aa0 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
19ab0 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
19ac0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
19ad0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
19ae0 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
19af0 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
19b00 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
19b10 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
19b20 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
19b30 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
19b40 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
19b50 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
19b60 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
19b70 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
19b80 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
19b90 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
19ba0 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
19bb0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
19bc0 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
19bd0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
19be0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
19bf0 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30  ggregate       0
19c00 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  x0008  /* Contai
19c10 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
19c20 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19c30 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
19c40 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  al   0x0010  /* 
19c50 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
19c60 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
19c70 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
19c80 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30  nded        0x00
19c90 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  20  /* sqlite3Se
19ca0 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
19cb0 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
19cc0 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
19cd0 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 34 30  eInfo     0x0040
19ce0 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
19cf0 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
19d00 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
19d10 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
19d20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
19d30 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
19d40 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
19d50 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
19d60 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
19d70 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
19d80 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
19d90 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
19da0 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
19db0 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69 6e 67   0x0200  /* Sing
19dc0 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
19dd0 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
19de0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
19df0 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20  NestedFrom      
19e00 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72 74 20  0x0400  /* Part 
19e10 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
19e20 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
19e30 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
19e40 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30  beConvert    0x0
19e50 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  800  /* Need con
19e60 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
19e70 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
19e80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
19e90 4d 61 78 41 67 67 20 20 20 20 20 20 20 30 78 31  MaxAgg       0x1
19ea0 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
19eb0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
19ec0 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
19ed0 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
19ee0 69 76 65 20 20 20 20 20 20 20 30 78 32 30 30 30  ive       0x2000
19ef0 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
19f00 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
19f10 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
19f20 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
19f30 65 64 20 20 20 20 20 20 20 30 78 34 30 30 30 20  ed       0x4000 
19f40 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
19f50 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
19f60 62 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a  bquery() */.../*
19f70 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
19f80 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
19f90 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
19fa0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
19fb0 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
19fc0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
19fd0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
19fe0 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
19ff0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1a000 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1a010 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1a020 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1a030 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1a040 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1a050 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20  ndex .**        
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1a070 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1a080 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1a090 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1a0a0 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1a0b0 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1a0c0 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1a0d0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1a0e0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1a0f0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1a100 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1a110 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1a120 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1a150 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1a160 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1a170 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1a180 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1a190 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1a1a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a1b0 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1a1c0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1a1d0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1a1e0 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a200 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1a210 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1a220 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1a230 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1a240 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1a250 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1a260 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1a270 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1a280 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1a290 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1a2a0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1a2b0 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1a2c0 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1a2d0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1a2e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a2f0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1a300 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1a310 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1a320 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1a330 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1a340 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1a350 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1a360 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1a370 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1a380 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1a390 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1a3a0 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1a3d0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1a3e0 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1a3f0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1a400 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1a410 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1a420 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1a430 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1a440 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1a450 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1a460 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1a470 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1a480 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1a4a0 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1a4b0 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1a4c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20  pDest->iSDParm. 
1a4d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a4e0 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1a4f0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1a500 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1a510 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1a540 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1a550 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1a560 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1a570 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1a580 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1a590 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1a5a0 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1a5d0 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1a5e0 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1a5f0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1a600 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a610 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1a620 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1a630 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1a660 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1a670 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1a680 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a690 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1a6a0 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1a6b0 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1a6c0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1a6d0 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1a6e0 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1a6f0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1a700 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1a710 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1a720 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1a730 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1a760 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1a770 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1a780 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7a0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1a7b0 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1a7c0 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1a7d0 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a7f0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1a800 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1a810 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1a820 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1a830 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1a840 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1a850 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1a860 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1a870 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1a880 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1a890 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1a8c0 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1a8d0 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1a8e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a8f0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1a900 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1a910 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1a920 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a940 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1a950 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1a960 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1a970 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1a980 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a990 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1a9a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a9b0 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1a9c0 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1a9d0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1a9e0 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1aa10 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1aa20 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1aa30 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1aa50 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1aa60 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1aa70 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1aa80 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1aa90 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1aaa0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1aab0 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1aac0 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1aad0 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1aae0 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1aaf0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1ab00 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1ab10 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1ab20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1ab30 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1ab40 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1ab50 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ab60 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1ab70 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1ab80 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1abb0 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1abc0 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1abd0 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1abe0 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1abf0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1ac00 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1ac10 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1ac20 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1ac30 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1ac40 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1ac50 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1ac60 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1ac70 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1ac80 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1ac90 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1aca0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1acb0 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1acc0 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1acd0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1ace0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1acf0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1ad00 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1ad10 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1ad20 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1ad30 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1ad40 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1ad50 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1ad60 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1ad70 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1ad80 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1ad90 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1ada0 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1adb0 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1adc0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1add0 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1ade0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1adf0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1ae00 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1ae10 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1ae20 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1ae30 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1ae40 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1ae50 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ae60 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1ae70 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1ae80 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1ae90 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1aea0 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1aeb0 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1aec0 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1aed0 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1aee0 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1aef0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1af00 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1af10 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1af20 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1af30 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1af40 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1af50 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1af60 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1af70 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1af80 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1af90 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1afa0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1afb0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1afc0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1afd0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1afe0 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1aff0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1b000 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1b010 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1b020 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1b030 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1b040 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1b050 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1b060 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1b070 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1b080 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1b090 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1b0a0 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1b0b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1b0c0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1b0d0 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1b0e0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1b0f0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1b100 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1b110 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1b120 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
1b130 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
1b140 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1b150 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1b160 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
1b170 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1b180 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1b190 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1b1a0 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1b1b0 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1b1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1b1d0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1b1e0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1b1f0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1b200 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1b210 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1b220 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1b230 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1b240 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1b250 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1b260 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1b270 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1b280 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1b290 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1b2a0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1b2b0 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1b2c0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
1b2d0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1b2e0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1b2f0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1b300 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1b310 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1b320 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1b330 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1b340 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1b350 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1b360 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1b370 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1b380 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1b390 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1b3a0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1b3b0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1b3c0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
1b3d0 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
1b3e0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1b3f0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1b400 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1b410 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1b420 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1b430 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1b440 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1b450 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1b460 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1b470 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1b480 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1b490 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1b4a0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1b4b0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1b4c0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1b4d0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1b4e0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1b4f0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1b500 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1b510 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1b520 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1b530 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1b540 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1b550 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1b560 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1b570 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1b580 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1b590 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1b5a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1b5b0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1b5c0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1b5d0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1b5e0 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1b5f0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1b600 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1b610 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1b620 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1b630 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1b640 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1b650 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
1b660 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1b670 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1b680 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1b690 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1b6a0 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1b6b0 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1b6c0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1b6d0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1b6e0 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1b6f0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1b700 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1b710 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1b720 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1b730 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1b740 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1b750 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1b760 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1b770 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1b780 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1b790 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1b7a0 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1b7b0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1b7c0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1b7d0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1b7e0 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1b7f0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1b800 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1b810 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1b820 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1b830 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1b840 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1b850 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1b860 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1b870 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1b880 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1b890 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1b8a0 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1b8b0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1b8c0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1b8d0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1b8e0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1b8f0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1b900 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
1b910 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
1b920 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1b930 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
1b940 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
1b950 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
1b960 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
1b970 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
1b980 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1b990 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
1b9a0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
1b9b0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
1b9c0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
1b9d0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1b9e0 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1b9f0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1ba00 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1ba10 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1ba20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
1ba30 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
1ba40 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
1ba50 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
1ba60 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
1ba70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ba80 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1ba90 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
1baa0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
1bab0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
1bac0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
1bad0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
1bae0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
1baf0 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
1bb00 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
1bb10 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
1bb20 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1bb30 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
1bb40 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
1bb50 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1bb60 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
1bb70 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1bb80 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
1bb90 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1bba0 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
1bbb0 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
1bbc0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1bbd0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1bbe0 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
1bbf0 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
1bc00 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1bc10 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
1bc20 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
1bc30 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1bc40 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
1bc50 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1bc60 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1bc70 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
1bc80 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1bc90 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
1bca0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1bcb0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
1bcc0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1bcd0 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1bce0 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
1bcf0 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
1bd00 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1bd10 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
1bd20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1bd30 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
1bd40 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1bd50 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1bd60 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
1bd70 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
1bd80 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1bd90 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
1bda0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
1bdb0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
1bdc0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
1bdd0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
1bde0 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
1bdf0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
1be00 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
1be10 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
1be20 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
1be30 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
1be40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1be50 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
1be60 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
1be70 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
1be80 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
1be90 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
1bea0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
1beb0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
1bec0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
1bed0 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
1bee0 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
1bef0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1bf00 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
1bf10 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
1bf20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
1bf30 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
1bf40 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
1bf50 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
1bf60 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
1bf70 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
1bf80 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
1bf90 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
1bfa0 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
1bfb0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1bfc0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1bfd0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1bfe0 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1bff0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1c000 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1c010 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1c020 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1c030 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1c040 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1c050 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1c060 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1c070 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1c080 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1c090 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1c0a0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1c0b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1c0c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1c0d0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1c0e0 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1c0f0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1c100 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1c110 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1c120 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1c130 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1c140 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1c150 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1c160 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1c170 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1c180 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1c190 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1c1a0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1c1b0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1c1c0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1c1d0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1c1e0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1c1f0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1c200 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1c210 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1c220 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1c230 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c240 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1c250 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1c260 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1c270 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1c280 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c290 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1c2a0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1c2b0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1c2c0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1c2d0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1c2e0 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1c2f0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1c300 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1c310 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1c320 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1c330 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1c340 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1c350 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1c360 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1c370 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1c380 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1c390 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1c3a0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1c3b0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1c3c0 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1c3d0 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ants */.  int aT
1c3e0 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1c3f0 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1c400 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1c410 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1c420 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1c430 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1c440 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1c450 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1c460 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1c470 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1c480 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1c490 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1c4a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1c4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c4c0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1c4d0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1c4e0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1c4f0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1c500 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1c510 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1c520 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1c530 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c540 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1c550 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1c560 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1c570 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c580 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1c590 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1c5a0 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1c5b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1c5c0 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1c5d0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1c5e0 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1c5f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1c600 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1c610 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1c620 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b  .  int iFixedOp;
1c630 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72          /* Never
1c640 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65   back out opcode
1c650 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20  s iFixedOp-1 or 
1c660 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74  earlier */.  int
1c670 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1c680 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1c690 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1c6a0 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1c6b0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  nts */.  int iSe
1c6c0 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
1c6d0 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64   Table of an ind
1c6e0 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61  ex whose exprs a
1c6f0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a  re being coded *
1c700 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65  /.  int iCacheLe
1c710 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43  vel;     /* ColC
1c720 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20  ache valid when 
1c730 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76  aColCache[].iLev
1c740 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20  el<=iCacheLevel 
1c750 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43  */.  int iCacheC
1c760 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75  nt;       /* Cou
1c770 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e  nter used to gen
1c780 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b  erate aColCache[
1c790 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a  ].lru values */.
1c7a0 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20    int nLabel;   
1c7b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c7c0 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20   of labels used 
1c7d0 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c  */.  int *aLabel
1c7e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61  ;         /* Spa
1c7f0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c  ce to hold the l
1c800 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63  abels */.  struc
1c810 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
1c820 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
1c830 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1c840 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
1c850 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d  /.    i16 iColum
1c860 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
1c870 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
1c880 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
1c890 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
1c8a0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
1c8b0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
1c8c0 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
1c8d0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
1c8e0 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
1c8f0 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
1c900 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c920 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
1c930 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
1c940 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
1c950 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
1c960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
1c970 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
1c980 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
1c990 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
1c9a0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
1c9b0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1c9c0 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
1c9d0 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
1c9e0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72   entry */.  Expr
1c9f0 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
1ca00 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
1ca10 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
1ca20 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
1ca30 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
1ca40 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
1ca50 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
1ca60 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
1ca70 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
1ca80 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
1ca90 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
1caa0 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
1cab0 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
1cac0 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
1cad0 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
1cae0 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
1caf0 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
1cb00 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
1cb10 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
1cb20 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
1cb30 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
1cb40 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1cb50 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1cb60 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1cb70 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1cb80 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1cb90 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1cba0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1cbb0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1cbc0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1cbd0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1cbe0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1cbf0 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1cc00 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1cc10 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1cc20 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1cc30 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1cc40 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1cc50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1cc60 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1cc70 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1cc80 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1cc90 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1cca0 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1ccb0 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1ccc0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1ccd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1cce0 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1ccf0 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1cd00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1cd10 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1cd20 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1cd30 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1cd40 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1cd50 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1cd60 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1cd70 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1cd80 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1cd90 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1cda0 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1cdb0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f  counters */..  /
1cdc0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
1cdd0 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20  ed while coding 
1cde0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
1cdf0 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  . */.  Parse *pT
1ce00 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
1ce10 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
1ce20 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
1ce30 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
1ce40 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
1ce50 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
1ce60 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
1ce70 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
1ce80 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
1ce90 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1cea0 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  f OP_CreateTable
1ceb0 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
1cec0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
1ced0 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1cee0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1cef0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1cf00 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1cf10 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1cf20 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1cf30 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1cf40 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1cf50 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1cf60 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1cf70 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1cf80 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1cf90 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1cfa0 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1cfb0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1cfc0 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1cfd0 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1cfe0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1cff0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1d000 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1d010 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1d020 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1d030 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1d040 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1d050 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1d060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d0a0 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1d0b0 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1d0c0 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1d0d0 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1d0e0 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1d0f0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1d100 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1d110 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1d120 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1d130 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1d140 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1d150 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1d160 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1d170 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1d180 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1d190 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1d1a0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1d1b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d1d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1d1f0 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1d200 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d210 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1d220 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1d230 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1d240 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1d250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d260 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1d270 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1d280 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1d290 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1d2a0 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1d2b0 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1d2c0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1d2d0 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1d2e0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1d2f0 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1d300 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1d310 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1d320 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1d330 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1d340 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1d350 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1d360 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1d370 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1d380 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1d390 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1d3a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1d3b0 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1d3c0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1d3d0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1d3e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d3f0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1d400 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1d410 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1d420 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1d430 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d440 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1d450 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1d460 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d480 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1d490 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1d4a0 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1d4b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d4c0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1d4d0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1d4e0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1d4f0 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1d500 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1d510 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1d520 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1d530 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1d540 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1d550 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1d560 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1d570 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1d580 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1d590 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1d5a0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1d5b0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1d5c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1d5d0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1d5e0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1d5f0 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1d600 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1d610 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1d620 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1d630 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1d640 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1d650 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1d660 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1d670 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1d680 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1d690 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1d6a0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1d6b0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1d6c0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1d6d0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1d6e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1d6f0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1d700 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1d710 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1d720 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1d730 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1d740 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1d750 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1d760 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1d770 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1d780 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1d790 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1d7a0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1d7b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d7c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1d7d0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d7f0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1d800 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1d810 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1d820 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1d830 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1d840 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1d850 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1d860 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1d870 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1d880 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1d890 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1d8a0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1d8b0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1d8c0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1d8d0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1d8e0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1d8f0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1d900 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1d910 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1d920 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1d930 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1d940 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1d950 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1d960 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1d970 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1d980 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1d990 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1d9a0 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1d9b0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1d9c0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1d9d0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1d9e0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1d9f0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1da00 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1da10 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1da20 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1da30 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1da40 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1da50 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1da60 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1da70 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1da80 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1da90 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1daa0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1dab0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1dac0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1dad0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1dae0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1daf0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1db00 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1db10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1db20 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1db30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1db40 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1db50 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1db60 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1db70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1db80 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1db90 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
1dba0 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
1dbb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1dbc0 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
1dbd0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1dbe0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
1dbf0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
1dc00 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1dc10 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
1dc20 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
1dc30 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
1dc40 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
1dc50 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
1dc60 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
1dc70 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
1dc80 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
1dc90 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1dca0 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
1dcb0 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
1dcc0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1dcd0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
1dce0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
1dcf0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
1dd00 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
1dd10 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
1dd20 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
1dd30 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1dd40 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
1dd50 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1dd60 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
1dd70 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
1dd80 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1dd90 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
1dda0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1ddb0 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
1ddc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1ddd0 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1dde0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
1ddf0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
1de00 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
1de10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1de20 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
1de30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
1de40 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
1de50 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
1de60 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
1de70 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
1de80 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
1de90 69 73 20 6f 70 65 6e 69 6e 67 20 66 6f 72 2d 64  is opening for-d
1dea0 65 6c 65 74 65 20 63 73 72 20 2a 2f 0a 23 64 65  elete csr */.#de
1deb0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1dec0 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
1ded0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1dee0 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1def0 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1df00 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1df10 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1df20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1df30 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1df40 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
1df50 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
1df60 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
1df70 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
1df80 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
1df90 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
1dfa0 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
1dfb0 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
1dfc0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1dfd0 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
1dfe0 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
1dff0 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
1e000 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
1e010 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
1e020 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
1e030 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
1e040 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
1e050 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
1e060 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
1e070 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
1e080 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
1e090 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
1e0a0 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
1e0b0 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
1e0c0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
1e0d0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
1e0e0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
1e0f0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
1e100 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
1e110 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1e120 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
1e130 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
1e140 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
1e150 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1e160 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
1e170 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
1e180 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
1e190 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
1e1a0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1e1b0 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
1e1c0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
1e1d0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
1e1e0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
1e1f0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
1e200 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
1e210 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
1e220 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
1e230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1e240 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
1e250 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1e270 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
1e280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e290 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
1e2a0 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1e2b0 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
1e2c0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1e2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1e2e0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1e2f0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1e300 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
1e310 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
1e320 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1e330 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
1e340 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
1e350 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
1e360 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e370 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
1e380 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1e390 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
1e3a0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
1e3b0 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
1e3c0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
1e3d0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
1e3e0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e410 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
1e420 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1e430 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1e440 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
1e450 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1e460 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
1e470 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
1e480 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
1e490 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1e4a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
1e4b0 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
1e4c0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
1e4d0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
1e4e0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
1e4f0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
1e500 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
1e510 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
1e520 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1e530 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
1e540 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
1e550 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
1e560 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
1e570 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
1e580 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
1e590 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
1e5a0 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
1e5b0 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1e5c0 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
1e5d0 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
1e5e0 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
1e5f0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
1e600 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
1e610 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
1e620 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
1e630 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
1e640 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
1e650 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
1e660 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
1e670 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
1e680 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1e690 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
1e6a0 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
1e6b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
1e6c0 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
1e6d0 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
1e6e0 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
1e6f0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1e700 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
1e710 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
1e720 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
1e730 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
1e740 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
1e750 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
1e760 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
1e770 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1e780 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
1e790 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
1e7a0 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
1e7b0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1e7c0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
1e7d0 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
1e7e0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
1e7f0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
1e800 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
1e810 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
1e820 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
1e830 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
1e840 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
1e850 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
1e860 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
1e870 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
1e880 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
1e890 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
1e8a0 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
1e8b0 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
1e8c0 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
1e8d0 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
1e8e0 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
1e8f0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1e900 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
1e910 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1e920 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1e930 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
1e940 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1e950 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1e960 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
1e970 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
1e980 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
1e990 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
1e9a0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
1e9b0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1e9c0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
1e9d0 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
1e9e0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
1e9f0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1ea00 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
1ea10 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ea30 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
1ea40 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
1ea50 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1ea60 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
1ea70 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1ea80 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
1ea90 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
1eaa0 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1eac0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1ead0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1eae0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1eaf0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1eb00 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1eb10 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1eb20 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
1eb30 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
1eb40 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1eb50 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1eb60 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1eb70 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1eb80 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1eb90 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1eba0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1ebb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1ebc0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1ebd0 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1ebe0 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
1ebf0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
1ec00 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1ec10 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
1ec20 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1ec30 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1ec40 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1ec50 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1ec60 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1ec80 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1ec90 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
1eca0 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
1ecb0 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
1ecc0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
1ecd0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
1ece0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
1ecf0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
1ed00 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
1ed10 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
1ed20 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
1ed30 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20     argument.. * 
1ed40 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1ed50 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
1ed60 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1ed70 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1ed80 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1ed90 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
1eda0 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
1edb0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1edc0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
1edd0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
1ede0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
1edf0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
1ee00 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
1ee10 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
1ee20 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1ee30 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
1ee40 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
1ee50 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
1ee60 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
1ee70 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
1ee80 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1ee90 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1eea0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1eeb0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1eec0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1eed0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1eee0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1eef0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1ef00 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1ef10 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1ef20 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49  r UPDATE. */.  I
1ef30 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1ef40 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1ef50 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1ef60 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1ef70 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1ef80 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1ef90 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1efa0 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1efb0 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1efc0 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1efd0 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1efe0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1eff0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1f000 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1f010 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1f020 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1f030 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1f040 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1f050 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1f060 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1f070 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1f080 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
1f090 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
1f0a0 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
1f0b0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
1f0c0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1f0d0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
1f0e0 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
1f0f0 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
1f100 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
1f110 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1f120 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
1f130 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
1f140 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
1f150 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
1f160 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
1f170 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
1f180 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1f190 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
1f1a0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
1f1b0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
1f1c0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
1f1d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
1f1e0 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
1f1f0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1f200 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1f210 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
1f220 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
1f230 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1f240 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1f250 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1f260 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
1f270 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
1f280 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
1f290 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
1f2a0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
1f2b0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
1f2c0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
1f2d0 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
1f2e0 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1f2f0 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1f300 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1f310 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1f320 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1f330 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1f340 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1f350 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1f360 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1f370 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1f380 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1f390 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1f3a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f3b0 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1f3c0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1f3d0 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1f3e0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1f3f0 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1f400 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1f410 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1f420 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1f430 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1f440 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1f450 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1f460 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c  ximum allowed al
1f470 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72  location.  0 for
1f480 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65   no malloc usage
1f490 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72   */.  u8   accEr
1f4a0 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54  ror;       /* ST
1f4b0 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20  RACCUM_NOMEM or 
1f4c0 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
1f4d0 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54  */.};.#define ST
1f4e0 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31  RACCUM_NOMEM   1
1f4f0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
1f500 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a  M_TOOBIG  2../*.
1f510 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
1f520 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1f530 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
1f540 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
1f550 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
1f560 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
1f570 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
1f580 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
1f590 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
1f5a0 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
1f5b0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1f5c0 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
1f5d0 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
1f5e0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
1f5f0 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
1f600 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
1f610 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
1f620 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1f630 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
1f640 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
1f650 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
1f660 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
1f670 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1f680 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
1f690 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
1f6a0 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
1f6b0 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
1f6c0 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
1f6d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
1f6e0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
1f6f0 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
1f700 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
1f710 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
1f720 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
1f730 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
1f740 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
1f750 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f770 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1f780 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
1f790 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
1f7a0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1f7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f7c0 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
1f7d0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1f7e0 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f800 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1f810 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
1f820 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
1f830 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1f840 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1f850 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
1f860 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
1f870 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f890 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
1f8a0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
1f8b0 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
1f8c0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
1f8f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1f900 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
1f910 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f920 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
1f930 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
1f940 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
1f950 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1f960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1f970 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1f980 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
1f990 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
1f9a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f9b0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1f9c0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1f9d0 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74  count */.  sqlit
1f9e0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
1f9f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fa00 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
1fa10 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
1fa20 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1fa30 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1fa40 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
1fa50 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
1fa60 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1fa70 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
1fa80 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
1fa90 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
1faa0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
1fab0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
1fac0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1fad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
1fae0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
1faf0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1fb20 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
1fb30 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
1fb60 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
1fb70 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
1fb80 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
1fb90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
1fba0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
1fbb0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
1fbc0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
1fbd0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1fbe0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
1fbf0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
1fc00 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
1fc30 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1fc40 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1fc60 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
1fc70 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
1fc80 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1fcb0 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
1fcc0 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
1fcf0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
1fd00 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1fd30 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
1fd40 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
1fd50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fd60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fd70 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
1fd80 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1fd90 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fdb0 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
1fdc0 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
1fdd0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
1fde0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
1fdf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
1fe00 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
1fe10 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
1fe20 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1fe50 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
1fe60 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
1fe70 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
1fe80 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
1fe90 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
1fea0 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
1feb0 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
1fec0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
1fed0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
1fee0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1fef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ff00 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
1ff10 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
1ff20 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
1ff30 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ff50 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
1ff60 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
1ff70 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
1ff80 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ffa0 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
1ffb0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
1ffc0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
1ffd0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
1ffe0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1fff0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
20000 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
20010 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
20020 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
20030 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
20040 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
20050 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
20060 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20080 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
20090 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
200a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
200b0 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
200c0 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
200d0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
200e0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
200f0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
20100 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
20110 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
20120 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
20130 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
20140 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
20150 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
20160 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
20170 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
20180 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
20190 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
201a0 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
201b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
201c0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
201d0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
201e0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
201f0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
20200 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
20210 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
20220 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
20230 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
20240 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
20250 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
20260 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
20270 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
20280 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
20290 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
202a0 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
202b0 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
202c0 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
202d0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
202e0 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
202f0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
20320 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
20330 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
20340 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
20350 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54  _TEST.  int (*xT
20360 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
20370 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
20380 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
20390 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
203a0 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
203b0 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
203c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
203d0 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
203e0 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a  e() calls */.};.
203f0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
20400 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
20410 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
20420 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
20430 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
20440 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
20450 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
20460 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
20470 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
20480 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
20490 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
204a0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
204b0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
204c0 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
204d0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
204e0 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
204f0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
20500 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
20510 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
20520 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
20530 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
20540 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
20550 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
20560 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
20570 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
20580 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
20590 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
205a0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
205b0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
205c0 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
205d0 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
205e0 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
205f0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
20600 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
20610 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
20620 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
20630 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
20640 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
20650 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
20660 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
20670 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
20680 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
20690 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
206a0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
206b0 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
206c0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
206d0 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
206e0 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
206f0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
20700 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
20710 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
20720 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
20730 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
20740 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
20750 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
20760 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
20770 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
20780 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
20790 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
207c0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
207d0 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
207e0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
207f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20800 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
20810 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
20820 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20840 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
20850 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
20860 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20890 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
208a0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
208b0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
208e0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
208f0 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
20900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20920 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
20930 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20960 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
20970 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
20980 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209a0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
209b0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
209c0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
209d0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
209e0 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
209f0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
20a00 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43   */.    struct C
20a10 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69  CurHint *pCCurHi
20a20 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
20a30 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
20a40 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
20a50 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
20a60 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
20a70 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
20a80 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
20a90 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
20aa0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
20ab0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
20ac0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
20ad0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
20ae0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20af0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20b00 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
20b10 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
20b20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20b30 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
20b40 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
20b50 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
20b60 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
20b70 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  pr*);../*.** Ret
20b80 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
20b90 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
20ba0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
20bb0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
20bc0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
20bd0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
20be0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
20bf0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
20c00 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
20c10 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
20c20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
20c30 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
20c40 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
20c50 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
20c60 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
20c70 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
20c80 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
20c90 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20ca0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
20cb0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
20cc0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
20cd0 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
20ce0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20cf0 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
20d00 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
20d10 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
20d20 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
20d30 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
20d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20d50 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
20d60 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
20d70 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
20d80 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
20d90 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
20da0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
20db0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
20dc0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20de0 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
20df0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
20e00 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
20e10 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
20e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
20e30 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
20e40 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
20e50 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
20e60 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
20e70 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
20e80 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
20e90 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
20ea0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
20eb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
20ec0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
20ed0 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
20ee0 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
20f00 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
20f10 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
20f20 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
20f30 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
20f40 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
20f50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
20f60 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
20f70 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
20f80 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
20f90 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
20fa0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
20fb0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
20fc0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
20fd0 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
20fe0 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
20ff0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
21000 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
21010 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
21020 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
21030 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
21040 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
21050 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
21060 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
21070 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
21080 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
21090 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
210a0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
210b0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
210c0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
210d0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
210e0 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
210f0 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
21100 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
21110 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
21120 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
21130 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
21140 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21160 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
21170 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21190 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
211a0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
211b0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
211c0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
211d0 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
21210 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
21220 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
21230 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
21240 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
21250 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
21260 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
21270 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
21280 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
21290 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
212a0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
212b0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
212c0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
212d0 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
212e0 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
212f0 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
21300 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
21310 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
21320 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
21330 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
21340 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
21350 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
21360 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
21370 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
21380 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
21390 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
213a0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
213b0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
213c0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
213d0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
213e0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
213f0 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
21400 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
21410 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
21420 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
21430 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
21440 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
21450 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
21460 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
21470 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
21480 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
21490 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
214a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
214b0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
214c0 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
214d0 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
214e0 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
214f0 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
21500 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
21510 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
21520 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
21530 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21540 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
21550 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
21560 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
21570 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
21580 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
21590 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
215a0 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
215b0 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
215c0 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
215d0 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
215e0 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
215f0 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
21600 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
21610 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
21620 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
21630 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
21640 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
21650 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
21660 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
21670 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
21680 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
21690 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
216a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
216b0 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
216c0 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
216d0 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
216e0 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
216f0 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
21700 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
21710 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
21720 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
21730 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
21740 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
21750 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
21760 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
21770 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
21780 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
21790 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
217a0 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
217b0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
217c0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
217d0 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
217e0 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
217f0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
21800 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
21810 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
21820 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
21830 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
21840 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
21850 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
21860 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
21870 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
21880 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
21890 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
218a0 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
218b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
218c0 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
218d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
218e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
218f0 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
21900 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
21910 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
21920 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
21930 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
21940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
21950 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
21960 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
21970 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21980 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  )]).#else.# defi
21990 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
219a0 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
219b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
219c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
219d0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
219e0 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
219f0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
21a00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
21a10 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
21a20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
21a30 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
21a40 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
21a50 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
21a60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
21a70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21a80 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
21a90 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
21aa0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
21ab0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
21ac0 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
21ad0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
21ae0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21af0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
21b00 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
21b10 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66  char)(x)).#endif
21b20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21b30 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
21b40 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c  ON_DIAGS.int sql
21b50 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
21b60 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
21b70 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
21b80 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
21b90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
21ba0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
21bb0 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
21bc0 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
21bd0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
21be0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
21bf0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
21c00 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
21c10 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
21c20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
21c30 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
21c40 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
21c50 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
21c60 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
21c70 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
21c80 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
21c90 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
21ca0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
21cb0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
21cc0 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
21cd0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
21ce0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21cf0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
21d00 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
21d10 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21d20 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
21d30 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
21d40 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  d*, u64);.void *
21d50 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
21d60 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
21d70 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
21d80 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
21d90 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
21da0 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
21db0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
21dc0 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
21dd0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
21de0 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
21df0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
21e00 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
21e10 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
21e20 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
21e30 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
21e40 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
21e50 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
21e60 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
21e70 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
21e80 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
21e90 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
21ea0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
21eb0 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65  lt(void);.#ifnde
21ec0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
21ed0 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20  ILTIN_TEST.void 
21ee0 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
21ef0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
21f00 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
21f10 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
21f20 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
21f30 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
21f40 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
21f50 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
21f60 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
21f70 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
21f80 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
21f90 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
21fa0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
21fb0 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
21fc0 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
21fd0 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
21fe0 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
21ff0 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
22000 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
22010 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
22020 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
22030 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
22040 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
22050 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
22060 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
22070 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
22080 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
22090 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
220a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
220b0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
220c0 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
220d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
220e0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
220f0 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
22100 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
22110 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
22120 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
22130 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65   .#else.# define
22140 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
22150 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
22160 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
22170 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
22180 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
22190 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
221a0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
221b0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
221c0 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
221d0 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
221e0 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
221f0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
22200 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
22210 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
22220 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
22230 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
22240 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
22250 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22260 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
22270 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
22280 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
22290 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
222a0 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
222b0 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
222c0 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
222d0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
222e0 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
222f0 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
22300 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
22310 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
22320 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
22330 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
22340 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
22350 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
22360 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
22370 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
22380 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
22390 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
223a0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
223b0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
223c0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
223d0 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a  ITE_MUTEX_NOOP).
223e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
223f0 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64  moryBarrier(void
22400 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
22410 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  e sqlite3MemoryB
22420 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a  arrier().#endif.
22430 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
22440 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
22450 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
22460 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74  ite3StatusUp(int
22470 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22480 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69  ite3StatusDown(i
22490 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
224a0 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68  qlite3StatusHigh
224b0 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b  water(int, int);
224c0 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
224d0 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
224e0 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
224f0 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
22500 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
22510 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
22520 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
22530 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
22540 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  oid);..#ifndef S
22550 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
22560 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
22570 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
22580 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
22590 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
225a0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
225b0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
225c0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
225d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
225e0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
225f0 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
22600 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
22610 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
22620 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
22630 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
22640 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
22650 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
22660 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
22670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
22680 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
22690 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
226a0 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
226b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
226c0 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
226d0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
226e0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
226f0 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
22700 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
22710 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
22720 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
22730 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
22740 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
22750 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
22760 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
22770 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
22780 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
22790 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
227a0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
227b0 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
227c0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
227d0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
227e0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
227f0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
22800 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
22810 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
22820 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
22830 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
22840 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
22850 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
22860 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
22870 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
22880 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
22890 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
228a0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
228b0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
228c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
228d0 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
228e0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
228f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22900 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
22910 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
22920 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
22930 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
22940 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22950 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
22960 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
22970 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
22980 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
22990 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
229a0 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
229b0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
229c0 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ect*, u8);.#endi
229d0 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
229e0 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
229f0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
22a00 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22a10 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
22a20 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
22a30 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
22a40 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
22a50 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
22a60 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
22a70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
22a80 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22a90 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
22aa0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22ab0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
22ac0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
22ad0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
22ae0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
22af0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
22b00 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
22b10 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
22b20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22b30 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
22b40 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
22b50 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
22b60 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
22b70 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
22b80 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
22b90 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
22ba0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
22bb0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
22bc0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
22bd0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
22be0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
22bf0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
22c00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22c10 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
22c20 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
22c30 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
22c40 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
22c50 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
22c60 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
22c70 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
22c80 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
22c90 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
22ca0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
22cb0 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
22cc0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
22cd0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
22ce0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
22cf0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
22d00 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
22d10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
22d20 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
22d30 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
22d40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
22d50 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
22d60 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
22d70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22d80 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
22d90 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
22da0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22db0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
22dc0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
22dd0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
22de0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22df0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
22e00 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
22e10 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
22e20 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
22e30 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
22e40 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
22e50 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
22e60 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
22e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
22e80 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
22e90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22ea0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
22eb0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
22ec0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
22ed0 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
22ee0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
22ef0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
22f00 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
22f10 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
22f20 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
22f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22f40 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
22f50 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
22f60 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
22f70 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
22f80 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22f90 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
22fa0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
22fb0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
22fc0 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
22fd0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
22fe0 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
22ff0 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
23000 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
23010 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
23020 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
23030 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
23040 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a  lumn**);.Table *
23050 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
23060 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
23070 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
23080 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
23090 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
230a0 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
230b0 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
230c0 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
230d0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
230e0 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
230f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23100 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
23110 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
23120 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
23130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
23140 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
23150 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
23160 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
23170 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
23180 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
23190 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
231a0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
231b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
231c0 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
231d0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
231e0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
231f0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
23200 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  e(Parse*,Token*)
23210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
23220 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
23230 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
23240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
23250 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
23260 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
23270 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
23280 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
23290 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74  Token*,u8,Select
232a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
232b0 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
232c0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
232d0 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
23300 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
23310 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
23320 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
23330 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23340 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23350 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
23360 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
23370 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
23380 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  EST.# define sql
23390 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
233a0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
233b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
233c0 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
233d0 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
233e0 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
233f0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
23400 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
23410 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
23420 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
23430 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
23440 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
23450 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
23460 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
23470 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
23480 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
23490 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
234a0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
234b0 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
234c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
234d0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
234e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
234f0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e  _BUILTIN_TEST.in
23500 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
23510 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
23520 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
23530 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
23540 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
23550 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
23560 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
23570 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
23580 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
23590 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
235a0 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
235b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
235c0 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
235d0 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
235e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
235f0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
23600 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
23610 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
23620 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
23630 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
23640 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
23650 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
23660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
23670 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
23680 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
23690 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
236a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
236b0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
236c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
236d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
236e0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
236f0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
23700 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
23710 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
23720 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
23730 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
23740 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
23750 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
23760 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
23770 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
23780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
23790 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
237a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
237b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
237c0 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
237d0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
237e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
237f0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
23800 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
23810 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
23820 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
23830 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
23840 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
23850 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
23860 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23870 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
23880 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
23890 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
238a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
238b0 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
238c0 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
238d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
238e0 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
238f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
23900 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
23910 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
23920 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
23930 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
23940 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
23950 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
23960 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23970 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
23980 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
23990 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
239a0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
239b0 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
239c0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
239d0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
239e0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
239f0 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
23a00 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
23a10 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
23a20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
23a30 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
23a40 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
23a50 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
23a90 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
23aa0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
23ab0 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
23ac0 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
23ad0 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
23ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
23af0 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
23b00 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23b10 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23b20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
23b30 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
23b40 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
23b50 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
23b60 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
23b70 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
23b80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23b90 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
23ba0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
23bb0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23bc0 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
23bd0 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
23be0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
23bf0 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
23c00 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
23c10 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
23c20 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
23c30 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
23c40 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
23c50 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
23c60 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
23c70 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
23c80 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
23c90 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
23cc0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23cd0 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
23ce0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23cf0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23d00 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
23d10 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
23d20 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
23d30 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
23d40 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
23d50 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
23d60 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
23d90 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c  List*,u16,Expr*,
23da0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23db0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
23dc0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
23dd0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
23de0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
23df0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
23e10 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
23e20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
23e30 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
23e40 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
23e50 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
23e60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
23e70 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
23e80 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
23e90 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
23ea0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23eb0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
23ec0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
23ed0 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
23ee0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
23ef0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
23f00 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
23f10 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
23f20 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
23f30 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
23f40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23f50 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
23f60 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
23f70 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
23f80 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
23f90 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
23fa0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
23fb0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
23fc0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
23fd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
23fe0 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
23ff0 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57  *);.u64 sqlite3W
24000 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
24010 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
24020 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
24030 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
24040 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
24050 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
24060 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
24070 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
24080 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
24090 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
240a0 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
240b0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
240c0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
240d0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
240e0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
240f0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
24100 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
24110 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
24120 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
24130 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
24140 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
24150 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
24160 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
24170 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
24180 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
24190 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
241a0 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
241b0 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
241c0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
241d0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
241e0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
241f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24200 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
24210 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
24220 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
24230 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24240 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
24250 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
24260 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
24270 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
24280 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
24290 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
242a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
242b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
242c0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
242d0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
242e0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
242f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24300 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
24310 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
24320 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
24330 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
24340 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
24350 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
24360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24370 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
24380 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24390 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
243a0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
243b0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
243c0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
243d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
243e0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
243f0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
24400 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
24410 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
24420 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
24430 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24440 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
24450 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
24460 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
24470 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
24480 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
24490 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
244a0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
244b0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
244c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
244d0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
244e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
244f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24500 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
24510 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
24520 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24530 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
24540 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
24550 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
24560 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
24570 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
24580 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
24590 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
245a0 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
245b0 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
245c0 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
245d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
245e0 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
245f0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
24600 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
24610 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24620 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
24630 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
24640 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
24650 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
24660 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
24670 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24680 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24690 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
246a0 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
246b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
246c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
246d0 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
246e0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
246f0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
24700 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
24710 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24720 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
24730 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
24740 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
24750 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
24760 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24770 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
24780 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
24790 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
247a0 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
247b0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
247c0 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
247d0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
247e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
247f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
24800 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24810 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
24820 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
24830 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24840 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
24850 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
24860 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
24870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
24880 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
24890 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
248a0 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
248b0 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
248c0 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
248d0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
248e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
248f0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
24900 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
24910 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
24920 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
24930 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
24940 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24950 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
24960 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
24970 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24980 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
24990 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
249a0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
249b0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
249c0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
249d0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
249e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
249f0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
24a00 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
24a10 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
24a20 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
24a30 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
24a40 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
24a50 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
24a60 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
24a70 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
24a80 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
24a90 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
24aa0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
24ab0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
24ac0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
24ad0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
24ae0 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
24af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
24b00 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
24b10 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
24b20 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
24b30 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
24b40 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
24b50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
24b60 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
24b70 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
24b80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
24b90 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
24ba0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
24bb0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
24bc0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
24bd0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
24be0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
24bf0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
24c00 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
24c10 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
24c20 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
24c30 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
24c40 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
24c50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
24c60 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
24c70 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24c80 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
24c90 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
24ca0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
24cb0 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
24cc0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
24cd0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
24ce0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
24cf0 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
24d00 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
24d10 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
24d20 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
24d30 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
24d40 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
24d50 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
24d60 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
24d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24d80 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
24d90 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
24da0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
24db0 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
24dc0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
24dd0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
24de0 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
24df0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
24e00 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
24e10 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
24e20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24e30 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
24e40 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
24e50 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
24e60 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
24e70 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
24e80 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
24e90 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
24ea0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
24eb0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
24ec0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
24ed0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
24ee0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
24ef0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
24f00 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
24f10 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
24f20 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
24f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
24f60 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
24f70 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
24f80 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
24f90 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
24fa0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
24fb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
24fc0 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
24fd0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
24fe0 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
24ff0 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
25000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
25010 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
25020 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25030 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25040 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
25050 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25060 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
25070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
25080 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
25090 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
250a0 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
250b0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
250c0 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
250d0 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
250e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
250f0 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
25100 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
25110 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
25120 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
25130 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
25140 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
25150 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
25160 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
25170 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
25180 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
25190 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
251a0 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
251b0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
251c0 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
251d0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
251e0 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
251f0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
25200 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  );.#if SELECTTRA
25210 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20  CE_ENABLED.void 
25220 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
25230 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e  Name(Select*,con
25240 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
25250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25260 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41  3SelectSetName(A
25270 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
25280 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
25290 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
252a0 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
252b0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
252c0 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
252d0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
252e0 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  int,int,u8,u8);.
252f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
25300 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
25310 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
25320 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
25330 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
25340 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
25350 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
25360 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  rGlobalFunctions
25370 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
25380 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
25390 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
253a0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
253b0 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
253c0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
253d0 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
253e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
253f0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25400 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
25410 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25420 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
25430 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
25440 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
25450 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
25460 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23   int);.#endif..#
25470 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25480 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
25490 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
254a0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
254b0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
254c0 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
254d0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
25500 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25510 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
25520 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
25530 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
25540 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
25550 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
25560 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
25570 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
25580 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
25590 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
255a0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
255b0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
255c0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
255d0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
255e0 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
255f0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
25600 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
25610 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
25620 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
25630 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
25640 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
25650 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
25660 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
25690 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
256a0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
256b0 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
256c0 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
256d0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
256e0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
256f0 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
25700 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
25710 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
25720 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
25730 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
25740 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
25750 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
25760 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
25770 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
25780 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
25790 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e3*,Select*);.  
257a0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
257b0 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
257c0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
257d0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25800 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
25810 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
25820 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
25830 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
25840 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
25850 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
25860 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
25870 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
25880 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
25890 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
258a0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
258b0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
258c0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
258d0 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
258e0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
258f0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
25900 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
25910 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
25920 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
25930 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
25940 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
25950 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
25960 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25970 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
25980 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
25990 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
259a0 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69  el : (p)).# defi
259b0 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
259c0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
259d0 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73  oplevel==0).#els
259e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
259f0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
25a00 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
25a10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
25a20 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
25a30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25a40 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
25a50 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
25a60 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
25a70 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
25a80 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25a90 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
25aa0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
25ab0 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
25ac0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
25ad0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
25ae0 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
25af0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
25b00 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
25b10 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
25b20 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
25b30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
25b40 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64  oplevel(p) 1.# d
25b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
25b60 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
25b70 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
25b80 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
25b90 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
25ba0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
25bb0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
25bc0 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
25bd0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
25be0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
25bf0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
25c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25c10 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
25c20 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
25c30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25c40 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
25c50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
25c60 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
25c70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
25c80 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
25c90 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
25ca0 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
25cb0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25cc0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
25cd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
25ce0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
25cf0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
25d00 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
25d10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25d20 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
25d30 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
25d40 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
25d50 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
25d60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
25d70 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
25d80 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25d90 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
25da0 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
25db0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
25dc0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
25dd0 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
25de0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
25df0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
25e00 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
25e10 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
25e20 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
25e30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
25e40 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
25e50 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
25e60 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
25e70 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
25e80 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
25e90 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
25ea0 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
25eb0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
25ec0 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
25ed0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
25ee0 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
25ef0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
25f00 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
25f10 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
25f20 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
25f30 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
25f40 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
25f50 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
25f60 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
25f70 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25f80 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
25f90 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
25fa0 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
25fb0 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
25fc0 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
25fd0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
25fe0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
25ff0 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
26000 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
26010 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
26020 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
26030 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
26040 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
26050 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
26060 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
26070 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
26080 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
26090 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
260a0 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
260b0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
260c0 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
260d0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
260e0 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
260f0 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
26100 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26110 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
26120 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
26130 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
26140 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
26150 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
26160 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
26170 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
26180 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
26190 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
261a0 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
261b0 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
261c0 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
261d0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
261e0 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
261f0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
26200 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
26210 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
26220 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
26230 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
26240 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
26250 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
26260 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
26270 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
26280 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
26290 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
262a0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
262b0 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
262c0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
262d0 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
262e0 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
262f0 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
26300 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
26310 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
26320 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
26330 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
26340 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
26350 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
26360 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
26370 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
26380 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
26390 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
263a0 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
263b0 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
263c0 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
263d0 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
263e0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
263f0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
26400 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
26410 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
26420 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
26430 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
26440 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
26450 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
26460 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
26470 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
26480 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
26490 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
264a0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
264b0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
264c0 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
264d0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
264e0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
264f0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
26500 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
26510 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
26520 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
26530 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
26540 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
26550 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
26560 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
26570 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
26580 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
26590 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
265a0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
265b0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
265c0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
265d0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
265e0 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
265f0 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
26600 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
26610 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
26620 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
26630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
26640 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
26650 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
26660 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
26670 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
26680 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
26690 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
266a0 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
266b0 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
266c0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
266d0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
266e0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
266f0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
26700 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
26710 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
26720 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
26730 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
26740 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
26750 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
26760 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
26770 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
26780 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
26790 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
267a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
267b0 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
267c0 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
267d0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
267e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
267f0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
26800 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
26810 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
26820 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
26830 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
26840 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
26850 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
26860 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
26870 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
26880 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
26890 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
268a0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
268b0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
268c0 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
268d0 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
268e0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
268f0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
26900 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
26910 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
26920 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
26930 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
26940 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
26950 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
26960 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26970 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
26980 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26990 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
269a0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
269b0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
269c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
269d0 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
269e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
269f0 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
26a00 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
26a10 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
26a20 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
26a30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
26a40 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
26a50 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
26a60 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
26a70 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
26a80 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
26a90 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
26aa0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
26ab0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
26ac0 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
26ad0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
26ae0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
26af0 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
26b00 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
26b10 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
26b40 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
26b50 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
26b60 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
26b70 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
26b80 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
26b90 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
26ba0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
26bb0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
26bc0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
26bd0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
26be0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
26bf0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
26c00 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
26c10 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
26c20 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
26c30 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
26c40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
26c50 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
26c60 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
26c70 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
26c80 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
26c90 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
26ca0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
26cb0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
26cc0 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
26cd0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26ce0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
26cf0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
26d00 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
26d10 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
26d20 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
26d30 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
26d40 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
26d50 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
26d60 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
26d70 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
26d80 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
26d90 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
26da0 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
26db0 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
26dc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26dd0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
26de0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
26df0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
26e00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
26e10 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
26e20 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
26e30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26e40 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
26e50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
26e70 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
26e80 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
26e90 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
26ea0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26eb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26ec0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
26ed0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26ee0 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
26ef0 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
26f00 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
26f10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26f20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26f30 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
26f40 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
26f50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
26f60 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
26f70 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
26f80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f90 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
26fa0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
26fb0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
26fc0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26fd0 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
26fe0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
26ff0 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
27000 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
27010 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
27020 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
27030 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
27040 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
27050 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
27060 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
27070 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
27080 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
27090 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
270a0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
270b0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
270c0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
270d0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
270e0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
270f0 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
27100 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
27110 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
27120 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
27130 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
27140 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
27150 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
27160 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
27170 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
27180 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27190 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
271a0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
271b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
271c0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
271d0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
271e0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
271f0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
27200 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
27210 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
27220 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
27230 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
27240 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
27250 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
27260 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
27270 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
27280 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a  st char*, u8*);.
27290 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
272a0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
272b0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
272c0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
272d0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
272e0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
272f0 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
27300 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
27310 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
27320 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
27330 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
27340 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
27350 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
27360 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
27370 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
27380 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
27390 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
273a0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
273b0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
273c0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
273d0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
273e0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
273f0 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
27400 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
27410 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
27420 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27430 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
27440 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
27450 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27460 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
27470 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
27480 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
27490 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
274a0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
274b0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
274c0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
274d0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
274e0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
274f0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
27500 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27510 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
27520 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
27530 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
27540 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
27550 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
27560 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
27570 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
27580 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27590 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
275a0 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
275b0 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
275c0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
275d0 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
275e0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
275f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
27600 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29  d *, .  void (*)
27610 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27620 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
27630 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
27640 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
27650 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
27660 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
27670 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
27680 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
27690 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
276a0 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c  uctor.);.int sql
276b0 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
276c0 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
276d0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
276e0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
276f0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
27700 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
27710 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
27720 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
27730 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27740 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
27750 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
27760 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
27770 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
27780 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
27790 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
277a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
277b0 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
277c0 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
277d0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
277e0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
277f0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
27800 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
27810 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
27820 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
27830 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
27840 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
27850 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
27860 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
27870 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
27880 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
27890 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
278a0 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
278b0 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
278c0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
278d0 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
278e0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
278f0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
27900 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
27910 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
27920 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
27930 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
27940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
27950 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
27960 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
27970 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
27980 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
27990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
279a0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
279b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
279c0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
279d0 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
279e0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
279f0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
27a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27a10 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
27a20 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
27a30 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
27a40 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
27a50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
27a60 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
27a70 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
27a80 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
27a90 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
27aa0 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
27ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27ac0 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
27ad0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
27ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
27af0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
27b00 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
27b10 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
27b20 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
27b30 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
27b40 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
27b50 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
27b60 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
27b70 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
27b80 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
27b90 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
27ba0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
27bb0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
27bc0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
27bd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27be0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
27bf0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
27c00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27c10 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
27c20 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
27c30 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
27c40 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
27c50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
27c60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
27c70 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
27c80 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
27c90 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
27ca0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
27cb0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
27cc0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
27cd0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27ce0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27cf0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
27d00 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
27d10 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
27d20 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
27d30 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
27d40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27d50 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
27d60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
27d70 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
27d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27d90 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
27da0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
27db0 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
27dc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27dd0 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
27de0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
27df0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
27e00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
27e10 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
27e20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
27e30 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
27e40 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
27e50 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
27e60 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
27e70 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
27e80 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
27e90 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
27ea0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
27eb0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
27ec0 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
27ed0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
27ee0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
27ef0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
27f00 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
27f10 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
27f20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
27f30 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
27f40 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
27f50 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
27f60 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
27f70 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
27f80 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
27f90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27fa0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
27fb0 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
27fc0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
27fd0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
27fe0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
27ff0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
28000 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
28010 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
28020 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
28030 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
28040 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
28050 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
28060 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
28070 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
28080 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
28090 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
280a0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
280b0 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
280c0 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
280d0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
280e0 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
280f0 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
28100 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28110 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
28120 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
28130 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
28140 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
28150 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
28160 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
28170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28180 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
28190 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
281a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
281b0 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
281c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
281d0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
281e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
281f0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
28200 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
28210 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
28220 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
28230 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
28240 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
28250 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
28260 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
28270 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
28280 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
28290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
282a0 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
282b0 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
282c0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
282d0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
282e0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
282f0 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
28300 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28310 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
28320 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
28330 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
28340 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
28350 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
28360 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
28370 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
28380 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
28390 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
283a0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
283b0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
283c0 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
283d0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
283e0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
283f0 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
28400 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
28410 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
28420 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
28430 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
28440 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
28450 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
28460 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
28470 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
28480 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
28490 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
284a0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
284b0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
284c0 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
284d0 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
284e0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
284f0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
28500 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
28510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
28520 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
28530 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
28540 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28550 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
28560 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
28570 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
28580 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28590 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
285a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
285b0 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
285c0 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
285d0 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
285e0 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
285f0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28600 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
28610 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
28620 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
28630 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
28640 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
28650 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
28660 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
28670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
28680 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
28690 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
286a0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
286b0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
286c0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
286d0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
286e0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
286f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
28700 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
28710 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
28720 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
28730 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
28740 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
28750 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
28760 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
28770 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
28780 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
28790 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
287a0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
287b0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
287c0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
287d0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
287e0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
287f0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
28800 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
28810 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
28820 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
28830 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
28840 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28850 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
28860 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
28870 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28880 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
28890 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
288a0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
288b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
288c0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
288d0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
288e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
288f0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
28900 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
28910 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
28920 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
28930 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
28940 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
28950 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
28960 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
28970 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
28980 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
28990 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
289a0 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
289b0 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
289c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
289d0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
289e0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
289f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28a00 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
28a10 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
28a20 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
28a30 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
28a40 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
28a50 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
28a60 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
28a70 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
28a80 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
28a90 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
28aa0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
28ab0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
28ac0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
28ad0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
28ae0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
28af0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
28b00 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
28b10 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
28b20 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28b30 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
28b40 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
28b50 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
28b60 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
28b70 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
28b80 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
28b90 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
28ba0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
28bb0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
28bc0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
28bd0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
28be0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
28bf0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
28c00 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
28c10 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
28c20 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
28c30 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
28c40 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
28c50 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
28c60 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
28c70 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
28c80 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
28c90 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
28ca0 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
28cb0 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
28cc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
28cd0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
28ce0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
28cf0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
28d00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
28d10 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
28d20 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
28d30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
28d40 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
28d50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28d60 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
28d70 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
28d80 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
28d90 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
28da0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
28db0 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
28dc0 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
28dd0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
28de0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
28df0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
28e00 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
28e10 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
28e20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
28e30 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
28e40 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
28e50 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
28e60 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
28e70 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
28e80 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28e90 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
28ea0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
28eb0 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
28ec0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
28ed0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
28ee0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
28ef0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
28f00 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
28f10 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
28f20 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
28f30 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
28f40 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
28f50 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
28f60 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
28f70 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
28f80 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
28f90 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
28fa0 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
28fb0 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
28fc0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
28fd0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
28fe0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
28ff0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
29000 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
29010 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
29020 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
29030 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
29040 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
29050 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
29060 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
29070 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
29080 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
29090 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
290a0 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
290b0 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
290c0 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
290d0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
290e0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
290f0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
29100 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
29110 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
29120 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
29130 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
29140 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
29150 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
29160 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29170 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
29180 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
29190 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
291a0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
291b0 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
291c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
291d0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
291e0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
291f0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
29200 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
29210 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
29220 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
29230 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
29240 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
29250 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
29260 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
29270 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
29280 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
29290 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
292a0 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
292b0 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
292c0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
292d0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
292e0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
292f0 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
29300 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
29310 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29320 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
29330 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
29340 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
29350 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
29360 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
29370 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
29380 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29390 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
293a0 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
293b0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
293c0 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
293d0 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
293e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
293f0 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
29400 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
29410 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
29420 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
29430 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
29440 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
29450 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
29460 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
29470 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
29480 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
29490 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
294a0 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
294b0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
294c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
294d0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
294e0 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
294f0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   *);.#endif../*.
29500 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
29510 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20  _ENABLE IOTRACE 
29520 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20  exists then the 
29530 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a  global variable.
29540 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ** sqlite3IoTrac
29550 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
29560 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20  o a printf-like 
29570 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a  routine used to.
29580 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61  ** print I/O tra
29590 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a  cing messages. .
295a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
295b0 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
295c0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
295d0 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
295e0 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
295f0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
29600 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
29610 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
29620 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
29630 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
29640 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
29650 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
29660 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
29670 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29680 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
29690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
296a0 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
296b0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
296c0 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
296d0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
296e0 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
296f0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
29700 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
29710 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
29720 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
29730 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
29740 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
29750 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
29760 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
29770 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
29780 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
29790 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
297a0 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
297b0 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
297c0 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
297d0 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
297e0 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
297f0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
29800 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
29810 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
29820 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
29830 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
29840 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
29850 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
29860 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
29870 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
29880 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
29890 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
298a0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
298b0 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
298c0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
298d0 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
298e0 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
298f0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
29900 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
29910 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
29920 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
29930 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
29940 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
29950 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
29960 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
29970 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
29980 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
29990 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
299a0 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
299b0 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
299c0 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
299d0 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
299e0 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
299f0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
29a00 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
29a10 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
29a20 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
29a30 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
29a40 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
29a50 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
29a60 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
29a70 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
29a80 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
29a90 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
29aa0 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
29ab0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
29ac0 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
29ad0 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
29ae0 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
29af0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
29b00 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
29b10 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
29b20 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
29b30 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
29b40 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
29b50 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
29b60 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
29b70 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
29b80 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
29b90 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
29ba0 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
29bb0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
29bc0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
29bd0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
29be0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
29bf0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
29c00 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
29c10 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
29c20 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
29c30 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
29c40 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
29c50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
29c60 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
29c70 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
29c80 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
29c90 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
29ca0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
29cb0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
29cc0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
29cd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
29ce0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
29cf0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
29d00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29d10 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
29d20 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
29d30 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29d40 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
29d50 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
29d60 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
29d70 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
29d80 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
29d90 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
29da0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
29db0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
29dc0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
29dd0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
29de0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
29df0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
29e00 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
29e10 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
29e20 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
29e30 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
29e40 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
29e50 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 23 69 66 20  cations */..#if 
29e60 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
29e70 50 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64  PPLE_SPI>0) && d
29e80 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
29e90 29 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  )../*.** An inst
29ea0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
29eb0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
29ec0 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
29ed0 74 68 65 20 70 72 6f 63 65 73 73 20 49 44 0a 2a  the process ID.*
29ee0 2a 20 61 6e 64 20 72 65 74 75 72 6e 2d 62 79 2d  * and return-by-
29ef0 72 65 66 65 72 65 6e 63 65 20 6c 6f 63 6b 73 74  reference lockst
29f00 61 74 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ate value.  The 
29f10 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43  SQLITE_FCNTL_LOC
29f20 4b 53 54 41 54 45 5f 50 49 44 0a 2a 2a 20 72 65  KSTATE_PID.** re
29f30 71 75 69 72 65 73 20 74 68 65 20 34 74 68 20 61  quires the 4th a
29f40 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
29f50 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20  e3_file_control 
29f60 74 6f 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  to be a pointer 
29f70 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  to an.** instanc
29f80 65 20 6f 66 20 4c 6f 63 6b 73 74 61 74 65 50 49  e of LockstatePI
29f90 44 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 77 69  D initialized wi
29fa0 74 68 20 61 20 4c 6f 63 6b 73 74 61 74 65 50 49  th a LockstatePI
29fb0 44 2e 70 69 64 20 76 61 6c 75 65 20 65 71 75 61  D.pid value equa
29fc0 6c 0a 2a 2a 20 74 6f 20 61 20 70 72 6f 63 65 73  l.** to a proces
29fd0 73 20 49 44 20 74 6f 20 62 65 20 74 65 73 74 65  s ID to be teste
29fe0 64 2c 20 6f 72 20 74 68 65 20 73 70 65 63 69 61  d, or the specia
29ff0 6c 20 76 61 6c 75 65 20 53 51 4c 49 54 45 5f 4c  l value SQLITE_L
2a000 4f 43 4b 53 54 41 54 45 5f 41 4e 59 50 49 44 0a  OCKSTATE_ANYPID.
2a010 2a 2a 20 54 68 65 20 4c 6f 63 6b 73 74 61 74 65  ** The Lockstate
2a020 2e 73 74 61 74 65 20 76 61 6c 75 65 20 69 73 20  .state value is 
2a030 61 6c 77 61 79 73 20 73 65 74 20 74 6f 20 6f 6e  always set to on
2a040 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2a050 6e 67 20 76 61 6c 75 65 73 0a 2a 2a 20 77 68 65  ng values.** whe
2a060 6e 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  n sqlite3_file_c
2a070 6f 6e 74 72 6f 6c 20 72 65 74 75 72 6e 73 3a 0a  ontrol returns:.
2a080 2a 2a 20 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  ** .**   SQLITE_
2a090 4c 4f 43 4b 53 54 41 54 45 5f 4f 46 46 20 20 20  LOCKSTATE_OFF   
2a0a0 20 6e 6f 20 61 63 74 69 76 65 20 73 71 6c 69 74   no active sqlit
2a0b0 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74  e file locks mat
2a0c0 63 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ch the specified
2a0d0 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45   pid.**   SQLITE
2a0e0 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e 20 20 20  _LOCKSTATE_ON   
2a0f0 20 20 61 63 74 69 76 65 20 73 71 6c 69 74 65 20    active sqlite 
2a100 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68  file locks match
2a110 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
2a120 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c  id.**   SQLITE_L
2a130 4f 43 4b 53 54 41 54 45 5f 4e 4f 54 41 44 42 20  OCKSTATE_NOTADB 
2a140 70 61 74 68 20 70 6f 69 6e 74 73 20 74 6f 20 61  path points to a
2a150 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 6e 6f   file that is no
2a160 74 20 61 6e 20 73 71 6c 69 74 65 20 64 62 20 66  t an sqlite db f
2a170 69 6c 65 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  ile.**   SQLITE_
2a180 4c 4f 43 4b 53 54 41 54 45 5f 45 52 52 4f 52 20  LOCKSTATE_ERROR 
2a190 20 70 61 74 68 20 77 61 73 20 6e 6f 74 20 76 61   path was not va
2a1a0 69 6c 64 20 6f 72 20 77 61 73 20 75 6e 72 65 61  ild or was unrea
2a1b0 64 61 62 6c 65 0a 2a 2f 0a 74 79 70 65 64 65 66  dable.*/.typedef
2a1c0 20 73 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74   struct Lockstat
2a1d0 65 50 49 44 20 4c 6f 63 6b 73 74 61 74 65 50 49  ePID LockstatePI
2a1e0 44 3b 0a 73 74 72 75 63 74 20 4c 6f 63 6b 73 74  D;.struct Lockst
2a1f0 61 74 65 50 49 44 20 7b 0a 20 20 70 69 64 5f 74  atePID {.  pid_t
2a200 20 70 69 64 3b 20 20 20 20 20 20 20 20 20 20 20   pid;           
2a210 20 20 20 20 20 20 2f 2a 20 50 72 6f 63 65 73 73        /* Process
2a220 20 49 44 20 74 6f 20 74 65 73 74 20 2a 2f 0a 20   ID to test */. 
2a230 20 69 6e 74 20 73 74 61 74 65 3b 20 20 20 20 20   int state;     
2a240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2a250 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
2a260 6c 6f 63 6b 20 28 72 65 74 75 72 6e 20 76 61 6c  lock (return val
2a270 75 65 29 20 2a 2f 0a 7d 3b 0a 0a 23 65 6e 64 69  ue) */.};..#endi
2a280 66 20 2f 2a 20 28 53 51 4c 49 54 45 5f 45 4e 41  f /* (SQLITE_ENA
2a290 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e 30 29  BLE_APPLE_SPI>0)
2a2a0 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 50   && defined(__AP
2a2b0 50 4c 45 5f 5f 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  PLE__) */../*.**
2a2c0 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
2a2d0 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
2a2e0 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
2a2f0 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
2a300 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
2a310 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
2a320 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
2a330 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
2a340 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
2a350 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
2a360 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
2a370 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2a380 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
2a390 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
2a3a0 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
2a3b0 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
2a3c0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
2a3d0 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
2a3e0 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
2a3f0 20 2a 2f 0a                                       */.