/ Hex Artifact Content
Login

Artifact 6e0c1082268e99aa337de1547df32b220e812fb3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
18f0: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
1900: 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65  P,S,E) macro che
1910: 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f  cks to see if po
1920: 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74  inter P points t
1930: 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62  o.** something b
1940: 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73  etween S (inclus
1950: 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c  ive) and E (excl
1960: 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e  usive)..**.** In
1970: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20   other words, S 
1980: 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20  is a buffer and 
1990: 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  E is a pointer t
19a0: 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
19b0: 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e   after.** the en
19c0: 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20  d of buffer S.  
19d0: 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72  This macro retur
19e0: 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69  ns true if P poi
19f0: 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  nts to something
1a00: 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  .** contained wi
1a10: 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  thin the buffer 
1a20: 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  S..*/.#if define
1a30: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
1a40: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a50: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 5c  _WITHIN(P,S,E) \
1a60: 0a 20 20 20 20 28 28 75 69 6e 74 70 74 72 5f 74  .    ((uintptr_t
1a70: 29 28 50 29 3e 3d 28 75 69 6e 74 70 74 72 5f 74  )(P)>=(uintptr_t
1a80: 29 28 53 29 20 26 26 20 28 75 69 6e 74 70 74 72  )(S) && (uintptr
1a90: 5f 74 29 28 50 29 3c 28 75 69 6e 74 70 74 72 5f  _t)(P)<(uintptr_
1aa0: 74 29 28 45 29 29 0a 23 65 6c 73 65 0a 23 20 64  t)(E)).#else.# d
1ab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
1ac0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 50 29 3e  HIN(P,S,E) ((P)>
1ad0: 3d 28 53 29 20 26 26 20 28 50 29 3c 28 45 29 29  =(S) && (P)<(E))
1ae0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1af0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
1b00: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
1b10: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
1b20: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
1b30: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1b40: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1b50: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1b60: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1b70: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1b80: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1b90: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1ba0: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30  & _MSC_VER>=1310
1bb0: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1bc0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65  E_NOINLINE  __de
1bd0: 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29  clspec(noinline)
1be0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
1bf0: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
1c10: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
1c20: 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69  e compiler intri
1c30: 6e 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20  nsics we desire 
1c40: 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e  are enabled when
1c50: 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69  .** compiling wi
1c60: 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  th an appropriat
1c70: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56  e version of MSV
1c80: 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74  C unless prevent
1c90: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c  ed by.** the SQL
1ca0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1cb0: 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f  INSIC define..*/
1cc0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1cd0: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54  LITE_DISABLE_INT
1ce0: 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65  RINSIC).#  if de
1cf0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
1d00: 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30  && _MSC_VER>=130
1d10: 30 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e  0.#    if !defin
1d20: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23  ed(_WIN32_WCE).#
1d30: 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69        include <i
1d40: 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20  ntrin.h>.#      
1d50: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
1d60: 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72  (_byteswap_ushor
1d70: 74 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  t).#      pragma
1d80: 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65   intrinsic(_byte
1d90: 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20  swap_ulong).#   
1da0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1db0: 73 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61  sic(_ReadWriteBa
1dc0: 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65  rrier).#    else
1dd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1de0: 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20  <cmnintrin.h>.# 
1df0: 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69     endif.#  endi
1e00: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e10: 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  The SQLITE_THREA
1e20: 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74  DSAFE macro must
1e30: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30   be defined as 0
1e40: 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20  , 1, or 2..** 0 
1e50: 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72  means mutexes ar
1e60: 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
1e70: 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69  sable and the li
1e80: 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a  brary is never.*
1e90: 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31  * threadsafe.  1
1ea0: 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61   means the libra
1eb0: 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64  ry is serialized
1ec0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69   which is the hi
1ed0: 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f  ghest.** level o
1ee0: 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20  f threadsafety. 
1ef0: 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62   2 means the lib
1f00: 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72  rary is multithr
1f10: 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65  eaded - multiple
1f20: 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20  .** threads can 
1f30: 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f  use SQLite as lo
1f40: 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72  ng as no two thr
1f50: 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20  eads try to use 
1f60: 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61  the same.** data
1f70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
1f80: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1f90: 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65  ..**.** Older ve
1fa0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
1fb0: 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61   used an optiona
1fc0: 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  l THREADSAFE mac
1fd0: 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72  ro..** We suppor
1fe0: 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63  t that for legac
1ff0: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
2000: 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ed(SQLITE_THREAD
2010: 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e  SAFE).# if defin
2020: 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23  ed(THREADSAFE).#
2030: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
2040: 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45  _THREADSAFE THRE
2050: 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20  ADSAFE.# else.# 
2060: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2070: 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20  THREADSAFE 1 /* 
2080: 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33  IMP: R-07272-223
2090: 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65  09 */.# endif.#e
20a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65  ndif../*.** Powe
20b0: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20  rsafe overwrite 
20c0: 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  is on by default
20d0: 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75  .  But can be tu
20e0: 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a  rned off using.*
20f0: 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50  * the -DSQLITE_P
2100: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
2110: 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  TE=0 command-lin
2120: 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  e option..*/.#if
2130: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45  ndef SQLITE_POWE
2140: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a  RSAFE_OVERWRITE.
2150: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2160: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
2170: 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ITE 1.#endif../*
2180: 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  .** EVIDENCE-OF:
2190: 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d   R-25715-37072 M
21a0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
21b0: 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
21c0: 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65  enabled by.** de
21d0: 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c  fault unless SQL
21e0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
21f0: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41  with SQLITE_DEFA
2200: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20  ULT_MEMSTATUS=0 
2210: 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65  in.** which case
2220: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2230: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2240: 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65  e disabled by de
2250: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  fault..*/.#if !d
2260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2270: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
2280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2290: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
22a0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
22b0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
22c0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
22d0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
22e0: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
22f0: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
2300: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
2310: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
2320: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
2330: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
2340: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2350: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
2360: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
2370: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
2380: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
2390: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
23a0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
23b0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
23c0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
23d0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
23e0: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
23f0: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
2400: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
2410: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
2420: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
2430: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
2440: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
2450: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
2460: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
2470: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
2480: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
2490: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
24a0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
24b0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
24c0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
24d0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
24e0: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
24f0: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
2500: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
2510: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
2520: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
2530: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
2540: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
2550: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f  red..**.** If no
2560: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
2570: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
2580: 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53  n set SQLITE_SYS
2590: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a  TEM_MALLOC as.**
25a0: 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f   the default..*/
25b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25c0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
25d0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
25e0: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
25f0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2600: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2610: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2620: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2630: 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72  DEBUG)>1.# error
2640: 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66   "Two or more of
2650: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
2660: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2670: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
2680: 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20  s\. are defined 
2690: 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  but at most one 
26a0: 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51  is allowed:\. SQ
26b0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
26c0: 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  OC, SQLITE_WIN32
26d0: 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f  _MALLOC, SQLITE_
26e0: 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49  MEMDEBUG,\. SQLI
26f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a  TE_ZERO_MALLOC".
2700: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2710: 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ed(SQLITE_SYSTEM
2720: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2730: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
2740: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  N32_MALLOC) \.  
2750: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2760: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  _ZERO_MALLOC) \.
2770: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a  TE_MEMDEBUG)==0.
2790: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27a0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a  SYSTEM_MALLOC 1.
27b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
27c0: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
27d0: 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74  OFT_LIMIT is not
27e0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20   zero, then try 
27f0: 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73  to keep the.** s
2800: 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61  izes of memory a
2810: 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77  llocations below
2820: 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72   this value wher
2830: 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23  e possible..*/.#
2840: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2850: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
2860: 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53  IMIT).# define S
2870: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2880: 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e  T_LIMIT 1024.#en
2890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65  dif../*.** We ne
28a0: 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f  ed to define _XO
28b0: 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f  PEN_SOURCE as fo
28c0: 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74  llows in order t
28d0: 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75  o enable.** recu
28e0: 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e  rsive mutexes on
28f0: 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65   most Unix syste
2900: 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20  ms and fchmod() 
2910: 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42  on OpenBSD..** B
2920: 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ut _XOPEN_SOURCE
2930: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
2940: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
2950: 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a  OS X, so omit.**
2960: 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   it..*/.#if !def
2970: 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52  ined(_XOPEN_SOUR
2980: 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
2990: 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21  __DARWIN__) && !
29a0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
29b0: 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f  _).#  define _XO
29c0: 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23  PEN_SOURCE 600.#
29d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45  endif../*.** NDE
29e0: 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44  BUG and SQLITE_D
29f0: 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74  EBUG are opposit
2a00: 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61  es.  It should a
2a10: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68  lways be true th
2a20: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44  at.** defined(ND
2a30: 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28  EBUG)==!defined(
2a40: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20  SQLITE_DEBUG).  
2a50: 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63  If this is not c
2a60: 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a  urrently true,.*
2a70: 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62  * make it true b
2a80: 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e  y defining or un
2a90: 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e  defining NDEBUG.
2aa0: 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e  .**.** Setting N
2ab0: 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20  DEBUG makes the 
2ac0: 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64  code smaller and
2ad0: 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62   faster by disab
2ae0: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65  ling the.** asse
2af0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
2b00: 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f  in the code.  So
2b10: 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66   we want the def
2b20: 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74  ault action.** t
2b30: 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20  o be for NDEBUG 
2b40: 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44  to be set and ND
2b50: 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66  EBUG to be undef
2b60: 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c  ined only if SQL
2b70: 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20  ITE_DEBUG.** is 
2b80: 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55  set.  Thus NDEBU
2b90: 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74  G becomes an opt
2ba0: 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20  -in rather than 
2bb0: 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65  an opt-out.** fe
2bc0: 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  ature..*/.#if !d
2bd0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
2be0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bf0: 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69  E_DEBUG) .# defi
2c00: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
2c10: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
2c20: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
2c30: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
2c40: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
2c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
2c60: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
2c70: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2c80: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
2c90: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
2ca0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2cb0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
2cc0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
2cd0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2ce0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
2cf0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
2d00: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d10: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
2d20: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
2d30: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2d40: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
2d50: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
2d60: 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72   .** doing cover
2d70: 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65  age testing, the
2d80: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64   condition insid
2d90: 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  e the argument t
2da0: 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20  o.** testcase() 
2db0: 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65  must be evaluate
2dc0: 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20  d both true and 
2dd0: 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74  false in order t
2de0: 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72  o.** get full br
2df0: 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20  anch coverage.  
2e00: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2e10: 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64  acro is inserted
2e20: 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75  .** to help ensu
2e30: 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74  re adequate test
2e40: 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61   coverage in pla
2e50: 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65  ces where simple
2e60: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65  .** condition/de
2e70: 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20  cision coverage 
2e80: 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20  is inadequate.  
2e90: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73  For example, tes
2ea0: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62  tcase().** can b
2eb0: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2ec0: 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c  ure boundary val
2ed0: 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20  ues are tested. 
2ee0: 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20   For.** bitmask 
2ef0: 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28  tests, testcase(
2f00: 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ) can be used to
2f10: 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20   make sure each 
2f20: 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66  bit.** is signif
2f30: 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61  icant and used a
2f40: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f  t least once.  O
2f50: 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  n switch stateme
2f60: 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c  nts.** where mul
2f70: 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74  tiple cases go t
2f80: 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b  o the same block
2f90: 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61   of code, testca
2fa0: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75  se().** can insu
2fb0: 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65  re that all case
2fc0: 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e  s are evaluated.
2fd0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
2fe0: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2ff0: 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
3000: 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a  3Coverage(int);.
3010: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
3020: 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73  e(X)  if( X ){ s
3030: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f  qlite3Coverage(_
3040: 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73  _LINE__); }.#els
3050: 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  e.# define testc
3060: 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ase(X).#endif../
3070: 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c  *.** The TESTONL
3080: 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  Y macro is used 
3090: 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61  to enclose varia
30a0: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
30b0: 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74   or.** other bit
30c0: 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61  s of code that a
30d0: 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70  re needed to sup
30e0: 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e  port the argumen
30f0: 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73  ts.** within tes
3100: 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65  tcase() and asse
3110: 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  rt() macros..*/.
3120: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
3130: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
3140: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3150: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54  TEST).# define T
3160: 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  ESTONLY(X)  X.#e
3170: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53  lse.# define TES
3180: 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  TONLY(X).#endif.
3190: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73  ./*.** Sometimes
31a0: 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c   we need a small
31b0: 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20   amount of code 
31c0: 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62  such as a variab
31d0: 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
31e0: 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f  n.** to setup fo
31f0: 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74  r a later assert
3200: 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57  () statement.  W
3210: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68  e do not want th
3220: 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70  is code to.** ap
3230: 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74  pear when assert
3240: 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20  () is disabled. 
3250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
3260: 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72  acro is therefor
3270: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e  e.** used to con
3280: 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20  tain that setup 
3290: 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22  code.  The "VVA"
32a0: 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20   acronym stands 
32b0: 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61  for.** "Verifica
32c0: 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
32d0: 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  , and Accreditat
32e0: 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20  ion".  In other 
32f0: 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f  words, the.** co
3300: 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e  de within VVA_ON
3310: 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72  LY() will only r
3320: 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69  un during verifi
3330: 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73  cation processes
3340: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45  ..*/.#ifndef NDE
3350: 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41  BUG.# define VVA
3360: 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  _ONLY(X)  X.#els
3370: 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  e.# define VVA_O
3380: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3390: 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20  *.** The ALWAYS 
33a0: 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73  and NEVER macros
33b0: 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61   surround boolea
33c0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68  n expressions wh
33d0: 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65  ich .** are inte
33e0: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
33f0: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3400: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3410: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3420: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
3430: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
3440: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
3450: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3460: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3470: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3480: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3490: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
34a0: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
34b0: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
34c0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
34d0: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
34e0: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
34f0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3500: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3510: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3520: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
3530: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
3540: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
3550: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3560: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3570: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3580: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3590: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
35a0: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
35b0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
35c0: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
35d0: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
35e0: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
35f0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3600: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3610: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3620: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
3630: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
3640: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3650: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3660: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3670: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3680: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3690: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
36a0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
36b0: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
36c0: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
36d0: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
36e0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
36f0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
3700: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
3710: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3720: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
3730: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3740: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
3750: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
3760: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
3770: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
3780: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
3790: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
37a0: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
37b0: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
37c0: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
37d0: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
37e0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
37f0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
3800: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
3810: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
3820: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
3830: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
3840: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
3850: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
3860: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
3870: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3880: 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
3890: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
38a0: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
38b0: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
38c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
38d0: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
38e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
38f0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
3900: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
3910: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
3920: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
3930: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
3940: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
3950: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
3960: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
3970: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
3980: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
3990: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
39a0: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
39b0: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
39c0: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
39d0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
39e0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
39f0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
3a00: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
3a10: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3a20: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3a30: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
3a40: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
3a50: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3a60: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
3a70: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e  * Return true (n
3a80: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
3a90: 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65  input is an inte
3aa0: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
3ab0: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
3ac0: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
3ad0: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
3ae0: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
3af0: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
3b00: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
3b10: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
3b20: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
3b30: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
3b40: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
3b50: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
3b60: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
3b70: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
3b80: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
3b90: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
3ba0: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
3bb0: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
3bc0: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
3bd0: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
3be0: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
3bf0: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
3c00: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
3c10: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
3c20: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
3c30: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
3c40: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
3c50: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
3c60: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
3c70: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
3c80: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
3c90: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
3ca0: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
3cb0: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
3cc0: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
3cd0: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
3ce0: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
3cf0: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
3d00: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
3d10: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
3d20: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
3d30: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
3d40: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
3d50: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
3d60: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
3d70: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
3d80: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
3d90: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
3da0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
3db0: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
3dc0: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
3dd0: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
3de0: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
3df0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3e00: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
3e10: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
3e20: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
3e30: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
3e40: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3e50: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
3e60: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
3e70: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3e80: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
3e90: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
3ea0: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
3eb0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
3ec0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
3ed0: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
3ee0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
3ef0: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
3f00: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
3f10: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
3f20: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
3f30: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
3f40: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3f50: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
3f60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3f70: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
3f80: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
3f90: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
3fa0: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
3fb0: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
3fc0: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
3fd0: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
3fe0: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
3ff0: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
4000: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
4010: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4020: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4030: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4040: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4050: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4060: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4070: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4080: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4090: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
40a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
40b0: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
40c0: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
40d0: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
40e0: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
40f0: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4100: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4110: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4120: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4130: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4140: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4150: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4160: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4170: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4180: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4190: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
41a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
41b0: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
41c0: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
41d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
41e0: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
41f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4200: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4210: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4220: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4230: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4240: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4250: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4260: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4270: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4280: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4290: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
42a0: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
42b0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
42c0: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
42d0: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
42e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
42f0: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4300: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4310: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4320: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4330: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4340: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4350: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4360: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4370: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
4380: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
4390: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
43a0: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
43b0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
43c0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
43d0: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
43e0: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
43f0: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
4400: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
4410: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
4420: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
4430: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
4440: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
4450: 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f  ), set it .** to
4460: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
4470: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
4480: 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52  =3 || SQLITE_THR
4490: 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64  EADSAFE==0.# und
44a0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ef SQLITE_MAX_WO
44b0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
44c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
44d0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
44e0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
44f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
4500: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
4510: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
4520: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a  ORKER_THREADS 8.
4530: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4540: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4550: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
4560: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4570: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
4580: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
4590: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
45a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53  WORKER_THREADS>S
45b0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
45c0: 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66  _THREADS.# undef
45d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
45e0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
45f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
4600: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51  ORKER_THREADS SQ
4610: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4620: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64  KER_THREADS.#end
4630: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
4640: 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c  fault initial al
4650: 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  location for the
4660: 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20   pagecache when 
4670: 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a  using separate.*
4680: 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72  * pagecaches for
4690: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
46a0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f  onnection.  A po
46b0: 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73  sitive number is
46c0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
46d0: 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61  f pages.  A nega
46e0: 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72  tive number N tr
46f0: 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73  anslations means
4700: 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a   that a buffer.*
4710: 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74  * of -1024*N byt
4720: 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  es is allocated 
4730: 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20  and used for as 
4740: 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74  many pages as it
4750: 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23   will hold..*/.#
4760: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4770: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
4780: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
4790: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
47a0: 48 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65  HE_INITSZ 100.#e
47b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  ndif../*.** GCC 
47c0: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
47d0: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
47e0: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
47f0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
4800: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
4810: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
4820: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
4830: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
4840: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4850: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4860: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4870: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4880: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4890: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
48a0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
48b0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
48c0: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
48d0: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
48e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
48f0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
4900: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
4910: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
4920: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
4930: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
4940: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4950: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4960: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4970: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4980: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4990: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
49a0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
49b0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
49c0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
49d0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
49e0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
49f0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
4a00: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
4a10: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
4a20: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
4a30: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
4a40: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4a50: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4a60: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4a70: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4a80: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4a90: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
4aa0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
4ab0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
4ac0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
4ad0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
4ae0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
4af0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
4b00: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
4b10: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
4b20: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
4b30: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
4b40: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4b50: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4b60: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4b70: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4b80: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4b90: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
4ba0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
4bb0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4bc0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4bd0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
4be0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
4bf0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
4c00: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4c10: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
4c20: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
4c30: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4c40: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4c50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4c60: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4c70: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4c80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4c90: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4ca0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4cb0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4cc0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4cd0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4ce0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
4cf0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
4d00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4d10: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
4d20: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4d30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
4d40: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4d50: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4d60: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4d70: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4d80: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4d90: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4da0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4db0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4dc0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4dd0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4de0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
4df0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
4e00: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
4e10: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
4e20: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4e30: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
4e40: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4e50: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4e60: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4e70: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4e80: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4e90: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4ea0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4eb0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4ec0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4ed0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4ee0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4ef0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4f00: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
4f10: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
4f20: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4f30: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
4f40: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4f50: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4f60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4f70: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4f80: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4f90: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4fa0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4fb0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4fc0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4fd0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4fe0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
4ff0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
5000: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
5010: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
5020: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
5030: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
5040: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
5050: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
5060: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
5070: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
5080: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
5090: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
50a0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
50b0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
50c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
50d0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
50e0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
50f0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
5100: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
5110: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
5120: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
5130: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
5140: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
5150: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
5160: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
5170: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
5180: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
5190: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
51a0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
51b0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
51c0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
51d0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
51e0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
51f0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
5200: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
5210: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5220: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
5230: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
5240: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
5250: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5260: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5270: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5280: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5290: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
52a0: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
52b0: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
52c0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
52d0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
52e0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
52f0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
5300: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
5310: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
5320: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
5330: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
5340: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
5350: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5360: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5370: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5380: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5390: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
53a0: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
53b0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
53c0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
53d0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
53e0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
53f0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5400: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5410: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5420: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5430: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5440: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5450: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5460: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5470: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5480: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5490: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
54a0: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
54b0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
54c0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
54d0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
54e0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
54f0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5500: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5510: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5520: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5530: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5540: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5550: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5560: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5570: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5580: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5590: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
55a0: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
55b0: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
55c0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
55d0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
55e0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
55f0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5600: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5610: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5620: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
5630: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
5640: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5650: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5660: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5670: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5680: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5690: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
56a0: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
56b0: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
56c0: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
56d0: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
56e0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
56f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
5700: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
5710: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5720: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
5730: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
5740: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5750: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5760: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5770: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5780: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5790: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
57a0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
57b0: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
57c0: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
57d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
57e0: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
57f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5800: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
5810: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
5820: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
5830: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
5840: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5850: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5860: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5870: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5880: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5890: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
58a0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
58b0: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
58c0: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
58d0: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
58e0: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
58f0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
5900: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
5910: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
5920: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
5930: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
5940: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5950: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5960: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5970: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5980: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28 64 65  time..*/.#if (de
5990: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
59a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
59b0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
59c0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
59d0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
59e0: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
59f0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
5a00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
5a10: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
5a20: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
5a30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
5a40: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
5a50: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
5a60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5a70: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26  ned(__arm__)) &&
5a80: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
5a90: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5aa0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
5ab0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
5ac0: 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53   1234.# define S
5ad0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5ae0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
5af0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5b00: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
5b10: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5b20: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
5b30: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
5b40: 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c  ned(sparc)    ||
5b50: 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f   defined(__ppc__
5b60: 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65  ))  \.    && !de
5b70: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
5b80: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
5b90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5ba0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
5bb0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5bc0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
5bd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5be0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
5bf0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5c00: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5c10: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64  ITE_UTF16BE.#end
5c20: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
5c30: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5c40: 29 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  ).# ifdef SQLITE
5c50: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
5c60: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
5c70: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
5c80: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
5c90: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
5ca0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5cb0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
5cc0: 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20  R    0     /* 0 
5cd0: 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61  means "unknown a
5ce0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20  t compile-time" 
5cf0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
5d00: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
5d10: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
5d20: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
5d30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5d40: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
5d50: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5d60: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
5d70: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5d80: 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44    (SQLITE_BIGEND
5d90: 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36  IAN?SQLITE_UTF16
5da0: 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  BE:SQLITE_UTF16L
5db0: 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  E).#endif../*.**
5dc0: 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   Constants for t
5dd0: 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73  he largest and s
5de0: 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65  mallest possible
5df0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
5e00: 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
5e10: 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73  e macros are des
5e20: 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f  igned to work co
5e30: 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20  rrectly on both 
5e40: 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69  32-bit and 64-bi
5e50: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  t.** compilers..
5e60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45  */.#define LARGE
5e70: 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66  ST_INT64  (0xfff
5e80: 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37  fffff|(((i64)0x7
5e90: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23  fffffff)<<32)).#
5ea0: 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f  define SMALLEST_
5eb0: 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29  INT64 (((i64)-1)
5ec0: 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34   - LARGEST_INT64
5ed0: 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20  )../* .** Round 
5ee0: 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74  up a number to t
5ef0: 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d  he next larger m
5f00: 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54  ultiple of 8.  T
5f10: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74  his is used.** t
5f20: 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61  o force 8-byte a
5f30: 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62  lignment on 64-b
5f40: 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73  it architectures
5f50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  ..*/.#define ROU
5f60: 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29  ND8(x)     (((x)
5f70: 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52  +7)&~7)../*.** R
5f80: 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65  ound down to the
5f90: 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c   nearest multipl
5fa0: 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e  e of 8.*/.#defin
5fb0: 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20  e ROUNDDOWN8(x) 
5fc0: 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  ((x)&~7)../*.** 
5fd0: 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
5fe0: 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69  pointer X is ali
5ff0: 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74  gned to an 8-byt
6000: 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69  e boundary.  Thi
6010: 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  s.** macro is us
6020: 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61  ed only within a
6030: 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66  ssert() to verif
6040: 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  y that the code 
6050: 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67  gets.** all alig
6060: 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f  nment restrictio
6070: 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a  ns correct..**.*
6080: 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c  * Except, if SQL
6090: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
60a0: 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66  ED_MALLOC is def
60b0: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a  ined, then the.*
60c0: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c  * underlying mal
60d0: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
60e0: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
60f0: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
6100: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
6110: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
6120: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
6130: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
6140: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
6150: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6160: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
6170: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
6180: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
6190: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
61a0: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
61b0: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
61c0: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
61d0: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
61e0: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
61f0: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
6200: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
6210: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
6220: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
6230: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
6240: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
6250: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
6260: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
6270: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
6280: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
6290: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
62a0: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
62b0: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
62c0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
62d0: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
62e0: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
62f0: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
6300: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
6310: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
6320: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
6330: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
6340: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
6350: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6360: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
6370: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6380: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
6390: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
63a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
63b0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
63c0: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
63d0: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
63e0: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
63f0: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
6400: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
6410: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
6420: 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20  d(__sun) \.  || 
6430: 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53  defined(__FreeBS
6440: 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  D__) \.  || defi
6450: 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f  ned(__DragonFly_
6460: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6470: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6480: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
6490: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
64a0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
64b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
64c0: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
64d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
64e0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  _MAX_MMAP_SIZE_x
64f0: 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66  c 1 /* exclude f
6500: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
6510: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6520: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6530: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
6540: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
6550: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
6560: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
6570: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
6580: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
6590: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
65a0: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
65b0: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
65c0: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
65d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
65e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
65f0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
6600: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6610: 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69  AP_SIZE 0.# defi
6620: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
6630: 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  T_MMAP_SIZE_xc 1
6640: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
6650: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
6660: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
6670: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6680: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
6690: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
66a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
66b0: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
66c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
66d0: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
66e0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
66f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
6700: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
6710: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
6720: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6730: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
6740: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
6750: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
6760: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
6770: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
6780: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
6790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
67a0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
67b0: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
67c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
67d0: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
67e0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
67f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6800: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6810: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6820: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
6830: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6840: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6850: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
6860: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6870: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
6880: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
6890: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
68a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
68b0: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
68c0: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
68d0: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
68e0: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
68f0: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
6900: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
6910: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
6920: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
6930: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
6940: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
6950: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
6960: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
6970: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6980: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
6990: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
69a0: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
69b0: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
69c0: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
69d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
69e0: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
69f0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
6a00: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
6a10: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
6a20: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
6a30: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
6a40: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
6a50: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
6a60: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
6a70: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
6a80: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
6a90: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
6aa0: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
6ab0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
6ac0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
6ad0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
6ae0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
6af0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
6b00: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
6b10: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
6b20: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
6b30: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
6b40: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
6b50: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
6b60: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
6b70: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
6b80: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
6b90: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
6ba0: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
6bb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
6bc0: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
6bd0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
6be0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
6bf0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
6c00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
6c10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
6c20: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
6c30: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
6c40: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
6c50: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6c60: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
6c70: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6c80: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
6c90: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
6ca0: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
6cb0: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
6cc0: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
6cd0: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
6ce0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
6cf0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
6d00: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
6d10: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
6d20: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
6d30: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
6d40: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
6d50: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
6d60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
6d70: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6d80: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
6d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
6da0: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
6db0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
6dc0: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
6dd0: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
6de0: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
6df0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
6e00: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
6e10: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
6e20: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
6e30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
6e40: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
6e50: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
6e60: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
6e70: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
6e80: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
6e90: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
6ea0: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
6eb0: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
6ec0: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
6ed0: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
6ee0: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
6ef0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
6f00: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
6f10: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
6f20: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
6f30: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
6f40: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6f50: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
6f60: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
6f70: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
6f80: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
6f90: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
6fa0: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
6fb0: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
6fc0: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
6fd0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
6fe0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
6ff0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
7000: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
7010: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
7020: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
7030: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
7040: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
7050: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
7060: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
7070: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
7080: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
7090: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
70a0: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
70b0: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
70c0: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
70d0: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
70e0: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
70f0: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
7100: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
7110: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
7120: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
7130: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
7140: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
7150: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
7160: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
7170: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
7180: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
7190: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
71a0: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
71b0: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
71c0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
71d0: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
71e0: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
71f0: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
7200: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
7210: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
7220: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
7230: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
7240: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
7250: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
7260: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
7270: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
7280: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
7290: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
72a0: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
72b0: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
72c0: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
72d0: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
72e0: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
72f0: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
7300: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
7310: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
7320: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
7330: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
7340: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
7350: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
7360: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
7370: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
7380: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
7390: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
73a0: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
73b0: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
73c0: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
73d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
73e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
73f0: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
7400: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
7410: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
7420: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
7430: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
7440: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
7450: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
7460: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
7470: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
7480: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
7490: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
74a0: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
74b0: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
74c0: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
74d0: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
74e0: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
74f0: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
7500: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
7510: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7520: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
7530: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
7540: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
7550: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
7560: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
7570: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
7580: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
7590: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
75a0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
75b0: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
75c0: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
75d0: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
75e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
75f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
7600: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
7610: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
7620: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
7630: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
7640: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
7650: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
7660: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
7670: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
7680: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
7690: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
76a0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
76b0: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
76c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
76d0: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
76e0: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
76f0: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
7700: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
7710: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
7720: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
7730: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
7740: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
7750: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
7760: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
7770: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
7780: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
7790: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
77a0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
77b0: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
77c0: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
77d0: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
77e0: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
77f0: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
7800: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
7810: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
7820: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
7830: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
7840: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
7850: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
7860: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
7870: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
7880: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
7890: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
78a0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
78b0: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
78c0: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
78d0: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
78e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
78f0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
7900: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
7910: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7920: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
7930: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
7940: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
7950: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
7960: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
7970: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
7980: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
7990: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
79a0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
79b0: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
79c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
79d0: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
79e0: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
79f0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
7a00: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
7a10: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
7a20: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
7a30: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
7a40: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
7a50: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
7a60: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
7a70: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
7a80: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
7a90: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
7aa0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
7ab0: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
7ac0: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
7ad0: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
7ae0: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
7af0: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
7b00: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
7b10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
7b20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b30: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
7b40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b50: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
7b60: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
7b70: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
7b80: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
7b90: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
7ba0: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7bb0: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
7bc0: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
7bd0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
7be0: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
7bf0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
7c00: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
7c10: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7c20: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
7c30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7c40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
7c50: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
7c60: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
7c70: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
7c80: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
7c90: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
7ca0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7cb0: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
7cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
7cd0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
7ce0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
7cf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
7d00: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
7d10: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
7d20: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
7d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7d40: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
7d50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
7d60: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
7d70: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
7d80: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
7d90: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7db0: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7dd0: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7df0: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
7e00: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7e10: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
7e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e30: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
7e40: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
7e50: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
7e60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7e70: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
7e80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7e90: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7ea0: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7eb0: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7ec0: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7ed0: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7ee0: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7ef0: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
7f00: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
7f10: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
7f20: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
7f30: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
7f40: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
7f50: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
7f60: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
7f70: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
7f80: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
7f90: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7fa0: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7fb0: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7fc0: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7fd0: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7fe0: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7ff0: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
8000: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
8010: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
8020: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
8030: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
8040: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
8050: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
8060: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
8070: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
8080: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
8090: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
80a0: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
80b0: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
80c0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
80d0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
80e0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
80f0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
8100: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
8110: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
8120: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
8130: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
8140: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
8150: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
8160: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
8170: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
8180: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
8190: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
81a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
81b0: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
81c0: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
81d0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
81e0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
81f0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
8200: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
8210: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
8220: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
8230: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
8240: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
8250: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
8260: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
8270: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
8280: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
8290: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
82a0: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
82b0: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
82c0: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
82d0: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
82e0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
82f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8300: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
8310: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
8320: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8330: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8340: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
8350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
8360: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
8370: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
8380: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
8390: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
83a0: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
83b0: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
83c0: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
83d0: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
83e0: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
83f0: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
8400: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
8410: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
8420: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
8430: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
8440: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
8450: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
8460: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
8470: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
8480: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
8490: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
84a0: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
84b0: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
84c0: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
84d0: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
84e0: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
84f0: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
8500: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
8510: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
8520: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
8530: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
8540: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
8550: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
8560: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
8570: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
8580: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
8590: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
85a0: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
85b0: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
85c0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
85d0: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
85e0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
85f0: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
8600: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
8610: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
8620: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
8630: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
8640: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
8650: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
8660: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
8670: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
8680: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
8690: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
86a0: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
86b0: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
86c0: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
86d0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
86e0: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
86f0: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
8700: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
8710: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8720: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
8730: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
8740: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
8750: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
8760: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
8770: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
8780: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
8790: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
87a0: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
87b0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
87c0: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
87d0: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
87e0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
87f0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
8800: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
8810: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
8820: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
8830: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
8840: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
8850: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
8860: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
8870: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
8880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8890: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
88a0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
88b0: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
88c0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
88d0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
88e0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
88f0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
8900: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
8910: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
8920: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
8930: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
8940: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
8950: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
8960: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
8970: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
8980: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
8990: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
89a0: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
89b0: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
89c0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
89d0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
89e0: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
89f0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
8a00: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
8a10: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8a20: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8a30: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
8a40: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
8a50: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
8a60: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
8a70: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
8a80: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
8a90: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
8aa0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8ab0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
8ac0: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
8ad0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
8ae0: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
8af0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
8b00: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
8b10: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
8b20: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
8b30: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
8b40: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
8b50: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
8b60: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
8b70: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
8b80: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
8b90: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
8ba0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
8bb0: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
8bc0: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
8bd0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
8be0: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
8bf0: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
8c00: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
8c10: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
8c20: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
8c30: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
8c40: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
8c50: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
8c60: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
8c70: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
8c80: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
8c90: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8ca0: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
8cb0: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
8cc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
8cd0: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
8ce0: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
8cf0: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
8d00: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
8d10: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
8d20: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
8d30: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
8d40: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
8d50: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
8d60: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
8d70: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
8d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
8d90: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8da0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8db0: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8dc0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8dd0: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8de0: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8df0: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
8e00: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
8e10: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
8e20: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
8e30: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
8e40: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
8e50: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8e60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8e70: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
8e80: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
8e90: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8ea0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8eb0: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8ec0: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8ed0: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8ee0: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8ef0: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
8f00: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8f10: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
8f20: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
8f30: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
8f40: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
8f50: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
8f60: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
8f70: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
8f80: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
8f90: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8fa0: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8fb0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8fc0: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8fd0: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8fe0: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8ff0: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
9000: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
9010: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
9020: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
9030: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
9040: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
9050: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
9060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
9070: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
9080: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
9090: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
90a0: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
90b0: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
90c0: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
90d0: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
90e0: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
90f0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
9100: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
9110: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
9120: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
9130: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
9140: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
9150: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
9160: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
9170: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
9180: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
9190: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
91a0: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
91b0: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
91c0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
91d0: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
91f0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
9200: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
9210: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
9220: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
9230: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
9240: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
9250: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
9260: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
9270: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
9280: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
9290: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
92a0: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
92b0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
92c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
92d0: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
92e0: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
92f0: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
9300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
9310: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
9320: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
9330: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
9340: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
9350: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
9360: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
9370: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
9380: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
9390: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
93a0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
93b0: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
93c0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
93d0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
93e0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
93f0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
9400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
9410: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
9420: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
9430: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
9440: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
9450: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
9460: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
9470: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
9480: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
9490: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
94a0: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
94b0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
94c0: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
94d0: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
94e0: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
94f0: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
9500: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
9510: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
9520: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
9530: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
9540: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
9550: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
9560: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
9570: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
9580: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
9590: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
95a0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
95b0: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
95c0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
95d0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
95e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
95f0: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
9600: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
9610: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
9620: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
9630: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9640: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
9650: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
9660: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
9670: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
9680: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
9690: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
96a0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
96b0: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
96c0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
96d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
96e0: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
96f0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
9700: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
9710: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
9720: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
9730: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
9740: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
9750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9760: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
9770: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
9780: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
9790: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
97a0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
97b0: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
97c0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
97d0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
97e0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
97f0: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
9800: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
9810: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
9820: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
9830: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
9840: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
9850: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
9860: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
9870: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
9880: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
9890: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
98a0: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
98b0: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
98c0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
98d0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
98e0: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
98f0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
9900: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
9910: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
9920: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
9930: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
9940: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
9950: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
9960: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
9970: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
9980: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
9990: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
99a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
99b0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
99c0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
99d0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
99e0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
99f0: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
9a00: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
9a10: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
9a20: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
9a30: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
9a40: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
9a50: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
9a60: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
9a70: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9a80: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9a90: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ab0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9ac0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
9ad0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
9ae0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9af0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9b00: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9b10: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9b20: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9b50: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
9b60: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9b70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
9b80: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
9b90: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9ba0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
9bb0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
9bc0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
9bd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9be0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
9bf0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
9c00: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
9c10: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
9c20: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
9c30: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
9c40: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
9c50: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
9c60: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
9c70: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
9c80: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
9c90: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9ca0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
9cb0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
9cc0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
9cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9ce0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
9cf0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9d10: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
9d20: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
9d30: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
9d40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9d50: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
9d60: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
9d70: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
9d80: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9da0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9db0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9dc0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9dd0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9df0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
9e00: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
9e10: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
9e20: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
9e30: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
9e40: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
9e50: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
9e60: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9e70: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9e80: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
9e90: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9ea0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ec0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9ed0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9ee0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9ef0: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f10: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
9f20: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
9f30: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e  tions */.  u8 en
9f40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9f50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
9f60: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75   encoding */.  u
9f70: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9f90: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9fa0: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9fb0: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9fc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9fd0: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
9fe0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
9ff0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
a000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a010: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
a020: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
a030: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
a040: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
a050: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
a060: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
a070: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
a080: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
a090: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
a0a0: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
a0b0: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
a0c0: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
a0d0: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0f0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
a100: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
a110: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
a120: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
a130: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a140: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
a150: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
a160: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
a170: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
a180: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
a190: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
a1a0: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
a1b0: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
a1c0: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
a1d0: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
a1e0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
a1f0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
a200: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
a210: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
a220: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
a230: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
a240: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
a250: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
a260: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
a270: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
a280: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
a290: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
a2a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
a2b0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
a2c0: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
a2d0: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
a2e0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
a2f0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
a300: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
a310: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
a320: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
a330: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
a340: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
a350: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
a360: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
a370: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
a380: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
a390: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
a3a0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
a3b0: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
a3c0: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
a3d0: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
a3e0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
a3f0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a410: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
a420: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
a430: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
a440: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
a450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
a460: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
a470: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
a480: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
a490: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
a4a0: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
a4b0: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
a4c0: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
a4d0: 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62    u8 imposterTab
a4e0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
a4f0: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
a500: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
a510: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
a520: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
a530: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a540: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
a550: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
a560: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
a570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a580: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a590: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a5a0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
a5b0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
a5c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a5d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
a5e0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
a5f0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
a600: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
a610: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
a620: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a630: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
a640: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
a650: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
a660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a670: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
a680: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
a690: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
a6a0: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
a6b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a6c0: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
a6d0: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
a6e0: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
a6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a700: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
a710: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
a720: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
a730: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
a740: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
a750: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
a760: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
a770: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
a780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a790: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
a7a0: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
a7b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
a7c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
a7d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
a7e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
a7f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a800: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a830: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
a840: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a850: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a870: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
a880: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
a890: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
a8a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
a8b0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
a8c0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a8d0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a8e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
a8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a900: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
a910: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
a920: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
a930: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
a940: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
a950: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
a960: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
a970: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
a980: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
a990: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
a9a0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
a9b0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
a9c0: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
a9d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
a9e0: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
a9f0: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
aa00: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
aa10: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
aa20: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
aa30: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
aa40: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
aa50: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
aa60: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
aa70: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
aa80: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
aa90: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
aaa0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
aab0: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
aac0: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
aad0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
aae0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
aaf0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
ab00: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
ab10: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
ab20: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
ab30: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
ab40: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
ab50: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
ab60: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
ab70: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
ab80: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
ab90: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
aba0: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
abb0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
abc0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
abd0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
abe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
abf0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
ac00: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74  N.  sqlite3_xaut
ac10: 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20  h xAuth;        
ac20: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
ac30: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
ac40: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
ac50: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
ac60: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
ac70: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
ac80: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
ac90: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
aca0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
acb0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
acc0: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
acd0: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
ace0: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
acf0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
ad00: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
ad10: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
ad20: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
ad30: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
ad40: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
ad50: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
ad60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ad70: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
ad80: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ad90: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
ada0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
adb0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
adc0: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
add0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ade0: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
adf0: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
ae00: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
ae20: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
ae30: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
ae40: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
ae50: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
ae60: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
ae70: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
ae80: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
ae90: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
aea0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
aeb0: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
aec0: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
aed0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
aee0: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
aef0: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
af00: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
af10: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
af20: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
af30: 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20  f.  FuncDefHash 
af40: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
af50: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
af60: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
af70: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
af80: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
af90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
afa0: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
afb0: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
afc0: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
afd0: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
afe0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
aff0: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b010: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
b020: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
b030: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
b040: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
b050: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
b060: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
b070: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
b080: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
b090: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
b0a0: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
b0b0: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
b0c0: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b0e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
b0f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
b100: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
b110: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
b120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b130: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
b140: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
b150: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
b160: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
b170: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
b180: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
b190: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
b1a0: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
b1b0: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
b1c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
b1d0: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
b1e0: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
b1f0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
b200: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
b210: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
b220: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
b230: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
b240: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
b250: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
b260: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
b270: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
b280: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
b290: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
b2a0: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
b2b0: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
b2c0: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
b2d0: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
b2e0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
b2f0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
b300: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
b310: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
b320: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
b330: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
b340: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
b350: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
b360: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
b370: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
b380: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
b390: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
b3a0: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
b3b0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
b3c0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
b3d0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
b3e0: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
b3f0: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
b400: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
b410: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
b420: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
b430: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
b440: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
b450: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
b460: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
b470: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
b480: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
b490: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
b4a0: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
b4b0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4d0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
b4e0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
b4f0: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
b500: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
b510: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
b520: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
b530: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
b540: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
b550: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
b560: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
b570: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
b580: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
b590: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b5a0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c  ENTICATION.  sql
b5b0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75  ite3_userauth au
b5c0: 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73  th;        /* Us
b5d0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b5e0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  n information */
b5f0: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
b600: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
b610: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
b620: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
b630: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
b640: 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62  EMA_ENC(db) ((db
b650: 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  )->aDb[0].pSchem
b660: 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20  a->enc).#define 
b670: 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28  ENC(db)        (
b680: 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  (db)->enc)../*.*
b690: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
b6a0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
b6b0: 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  3.flags..*/.#def
b6c0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
b6d0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
b6e0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
b6f0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
b700: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
b710: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
b720: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
b730: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
b740: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
b750: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
b760: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
b770: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34        0x00000004
b780: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
b790: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
b7a0: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
b7b0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
b7c0: 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20  nc  0x00000008  
b7d0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
b7e0: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
b7f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b800: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
b810: 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a    0x00000010  /*
b820: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
b830: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
b840: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
b850: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
b860: 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75  0020  /* Show fu
b870: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
b880: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
b890: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
b8a0: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
b8b0: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
b8c0: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
b8d0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b8e0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
b8f0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
b900: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
b910: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
b920: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b950: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
b960: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
b970: 2a 2f 0a 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 20 20 2f 2a 20               /* 
b9a0: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
b9b0: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
b9c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9d0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
b9e0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
b9f0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
ba00: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
ba10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
ba40: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
ba50: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
ba60: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
ba70: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
ba80: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
ba90: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
baa0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bab0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
bac0: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
bad0: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
bae0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
baf0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
bb00: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
bb10: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
bb20: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
bb30: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
bb40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bb50: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
bb60: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
bb70: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
bb80: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
bb90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
bba0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
bbb0: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
bbc0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
bbd0: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
bbe0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bbf0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
bc00: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
bc10: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
bc20: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
bc30: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
bc40: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
bc50: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
bc60: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
bc70: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
bc80: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
bc90: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
bca0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
bcb0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
bcc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
bcd0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
bce0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
bcf0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
bd00: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
bd10: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
bd20: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
bd30: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
bd40: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
bd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd60: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
bd70: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
bd80: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
bd90: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
bda0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bdb0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
bdc0: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
bdd0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
bde0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
bdf0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
be00: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
be10: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
be20: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
be30: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
be40: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
be50: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
be60: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
be70: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
be80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
be90: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30  bleTrigger  0x00
bea0: 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  800000  /* True 
beb0: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
bec0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
bed0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20  LITE_DeferFKs   
bee0: 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20      0x01000000  
bef0: 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20  /* Defer all FK 
bf00: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
bf10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
bf20: 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30  eryOnly      0x0
bf30: 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61  2000000  /* Disa
bf40: 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61  ble database cha
bf50: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
bf60: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20  SQLITE_VdbeEQP  
bf70: 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30        0x04000000
bf80: 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41    /* Debug EXPLA
bf90: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f  IN QUERY PLAN */
bfa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bfb0: 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30  Vacuum         0
bfc0: 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75  x08000000  /* Cu
bfd0: 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43  rrently in a VAC
bfe0: 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  UUM */.#define S
bff0: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
c000: 20 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20       0x10000000 
c010: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
c020: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
c030: 61 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  ad */.../*.** Bi
c040: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
c050: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
c060: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
c070: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
c080: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
c090: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
c0a0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
c0b0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
c0c0: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
c0d0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
c0e0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
c0f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c100: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
c110: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
c120: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
c130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
c140: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
c150: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
c160: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
c170: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
c180: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
c190: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
c1a0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
c1b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
c1c0: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
c1d0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
c1e0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
c1f0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
c200: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
c210: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
c220: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
c230: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
c240: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
c250: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
c260: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
c270: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
c280: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
c290: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
c2a0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
c2b0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
c2c0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
c2d0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
c2e0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
c2f0: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
c300: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c310: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
c320: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
c330: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
c340: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
c350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c360: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
c370: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
c380: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
c390: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
c3a0: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
c3b0: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
c3c0: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
c3d0: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
c3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
c3f0: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
c400: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
c410: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
c420: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  a */.#define SQL
c430: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
c440: 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41     0x2000   /* A
c450: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
c460: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
c470: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
c480: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
c490: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
c4a0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
c4b0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
c4c0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
c4d0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
c4e0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
c4f0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
c500: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c510: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
c520: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c530: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
c540: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
c550: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
c560: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
c570: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
c580: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
c590: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
c5a0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
c5b0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
c5c0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
c5d0: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
c5e0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c5f0: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
c600: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
c610: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
c620: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
c630: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
c640: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
c650: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
c660: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
c670: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
c680: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
c690: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
c6a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
c6b0: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
c6c0: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
c6d0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
c6e0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
c6f0: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
c700: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
c710: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
c720: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
c730: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
c740: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
c750: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
c760: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
c770: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
c780: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
c790: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
c7a0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
c7b0: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
c7c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c7d0: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
c7e0: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
c7f0: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
c800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c810: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
c820: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
c830: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
c840: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
c850: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
c860: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
c870: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
c880: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
c890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8a0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
c8b0: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
c8c0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
c8d0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
c8e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8f0: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
c900: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
c910: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
c920: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
c930: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
c940: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
c950: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
c960: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
c970: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
c980: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
c990: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
c9a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
c9b0: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
c9c0: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
c9d0: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
c9e0: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
c9f0: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
ca00: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
ca10: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
ca20: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
ca30: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
ca40: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
ca50: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
ca60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ca70: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
ca80: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
ca90: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
caa0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
cab0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
cac0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
cad0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
cae0: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
caf0: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
cb00: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
cb10: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
cb20: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
cb30: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
cb40: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
cb50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
cb60: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
cb70: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
cb80: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
cb90: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
cba0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
cbb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
cbc0: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
cbd0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
cbe0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
cbf0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc10: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
cc20: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
cc30: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
cc40: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
cc50: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
cc60: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
cc70: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
cc80: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
cc90: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
cca0: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
ccb0: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
ccc0: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
ccd0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
cce0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
ccf0: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
cd00: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
cd10: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
cd20: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
cd30: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
cd40: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
cd50: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
cd60: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
cd70: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
cd80: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
cd90: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
cda0: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
cdb0: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
cdc0: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
cdd0: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
cde0: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
cdf0: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
ce00: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
ce10: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
ce20: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
ce30: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
ce40: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
ce50: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
ce60: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
ce70: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
ce80: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
ce90: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
cea0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
ceb0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
cec0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
ced0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
cee0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
cef0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
cf00: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
cf10: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
cf20: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
cf30: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
cf40: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
cf50: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
cf60: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
cf70: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
cf80: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
cf90: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
cfa0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
cfb0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
cfc0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
cfd0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
cfe0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
cff0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
d000: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
d010: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
d020: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
d030: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
d040: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
d050: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
d060: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
d070: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
d080: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
d090: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
d0a0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
d0b0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
d0c0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
d0d0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
d0e0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
d0f0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
d100: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
d110: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
d120: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
d130: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
d140: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
d150: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
d160: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
d170: 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53  ASK  0x0003 /* S
d180: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
d190: 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54  TE_UTF16BE or UT
d1a0: 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65  F16LE */.#define
d1b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
d1c0: 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20  E     0x0004 /* 
d1d0: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
d1e0: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
d1f0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d200: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
d210: 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61      0x0008 /* Ca
d220: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
d230: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
d240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d250: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
d260: 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65  0x0010 /* Epheme
d270: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
d280: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
d290: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
d2a0: 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a  EDCOLL 0x0020 /*
d2b0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d2c0: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
d2d0: 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69  e called*/.#defi
d2e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d2f0: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
d300: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
d310: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
d320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d330: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
d340: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
d350: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
d360: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d370: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
d380: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
d390: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
d3a0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
d3b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d3c0: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
d3d0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
d3e0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
d3f0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
d400: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
d410: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
d420: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
d430: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d440: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d450: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
d460: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d470: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d480: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d4a0: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
d4b0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
d4c0: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
d4d0: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
d4e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  ne SQLITE_FUNC_S
d4f0: 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f  LOCHNG  0x2000 /
d500: 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e  * "Slow Change".
d510: 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20   Value constant 
d520: 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20  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 2a 2a 20               ** 
d550: 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d  single query - m
d560: 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72  ight change over
d570: 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   time */../*.** 
d580: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
d590: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
d5a0: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
d5b0: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
d5c0: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
d5d0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
d5e0: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
d5f0: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
d600: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
d610: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d620: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d630: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
d640: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d650: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d660: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d670: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d680: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
d690: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
d6a0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
d6b0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d6c0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
d6d0: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
d6e0: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
d6f0: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
d700: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
d710: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
d720: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
d730: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
d740: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
d750: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
d760: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
d770: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d780: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
d790: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
d7a0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d7b0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d7c0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
d7d0: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
d7e0: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
d7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d800: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
d810: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
d820: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d830: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
d840: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
d850: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
d860: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d870: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
d880: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
d890: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
d8a0: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
d8b0: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
d8c0: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
d8d0: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
d8e0: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
d8f0: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
d900: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
d910: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
d920: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a   single query..*
d930: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
d940: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d950: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
d960: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
d970: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
d980: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
d990: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
d9a0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
d9b0: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
d9c0: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
d9d0: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
d9e0: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
d9f0: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
da00: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
da10: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
da20: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
da30: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
da40: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
da50: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
da60: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
da70: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
da80: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
da90: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
daa0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
dab0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
dac0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
dad0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
dae0: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
daf0: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
db00: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
db10: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
db20: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
db30: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
db40: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
db50: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
db60: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
db70: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
db80: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
db90: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
dba0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
dbb0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
dbc0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
dbd0: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
dbe0: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
dbf0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
dc00: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
dc10: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
dc20: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
dc30: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dc40: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
dc50: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
dc60: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
dc70: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dc80: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dc90: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dca0: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
dcb0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
dcc0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
dcd0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dce0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
dcf0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
dd00: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
dd10: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dd20: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dd30: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dd40: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
dd50: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
dd60: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
dd70: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dd80: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
dd90: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
dda0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ddb0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
ddc0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
ddd0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
dde0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
ddf0: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
de00: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
de10: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
de20: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
de30: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
de40: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
de50: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
de60: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
de70: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
de80: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
de90: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
dea0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
deb0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
dec0: 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
ded0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
dee0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
def0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
df00: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
df10: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
df20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
df30: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
df40: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
df50: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
df60: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
df70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
df80: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
df90: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
dfa0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dfb0: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
dfc0: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
dfd0: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
dfe0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dff0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
e000: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
e010: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
e020: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
e030: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
e040: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e050: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e060: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
e070: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
e080: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
e090: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
e0a0: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
e0b0: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
e0c0: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
e0d0: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
e0e0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
e0f0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
e100: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
e110: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
e120: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
e130: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
e140: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
e150: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
e160: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
e170: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
e180: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
e190: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
e1a0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
e1b0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
e1c0: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
e1d0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
e1e0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
e1f0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
e200: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
e210: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
e220: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
e230: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
e240: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
e250: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
e260: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
e270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
e280: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
e290: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
e2a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
e2b0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
e2c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e2d0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
e2e0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
e2f0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
e300: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
e310: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e320: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
e330: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
e340: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
e350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e360: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
e370: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
e380: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
e390: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
e3a0: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
e3b0: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
e3c0: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
e3d0: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
e3e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
e3f0: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
e400: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
e410: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
e420: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
e430: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
e440: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
e450: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
e460: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
e470: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
e480: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
e490: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
e4a0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
e4b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e4c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e4d0: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
e4e0: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
e4f0: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
e500: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
e510: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
e520: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
e530: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
e540: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
e550: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
e560: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
e570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e580: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
e590: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e5a0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5c0: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
e5d0: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e5e0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e5f0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e600: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
e610: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
e620: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
e630: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
e640: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
e650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
e660: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
e670: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
e680: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e690: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e6a0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e6b0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e6c0: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e6d0: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e6e0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e6f0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e700: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e710: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e720: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e730: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e740: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e750: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e760: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e770: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e780: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e790: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e7a0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e7b0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e7c0: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e7d0: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e7e0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e7f0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e800: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e810: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e820: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e830: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e840: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e850: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e860: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e870: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e880: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e890: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e8a0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e8b0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
e8c0: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
e8d0: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e8e0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e8f0: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e900: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e910: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e920: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e930: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e940: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e950: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e960: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e970: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e980: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e990: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e9a0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e9b0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e9c0: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e9d0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e9e0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
e9f0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
ea00: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
ea10: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ea20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ea30: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
ea40: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
ea50: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
ea60: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
ea70: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
ea80: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
ea90: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
eaa0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
eab0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
eac0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
ead0: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
eae0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
eaf0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
eb00: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
eb10: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
eb20: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
eb30: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
eb40: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
eb50: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
eb60: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
eb70: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
eb80: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
eb90: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
eba0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
ebb0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
ebc0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
ebd0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
ebe0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
ebf0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
ec00: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
ec10: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
ec20: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
ec30: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
ec40: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
ec50: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
ec60: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
ec70: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
ec80: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
ec90: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
eca0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
ecb0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
ecc0: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
ecd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ece0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
ecf0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
ed00: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
ed10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
ed20: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
ed30: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
ed40: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
ed50: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
ed60: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
ed70: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
ed80: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
ed90: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
eda0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
edb0: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
edc0: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
edd0: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
ede0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
edf0: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
ee00: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
ee10: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
ee20: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
ee30: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
ee40: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
ee50: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
ee60: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
ee70: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
ee80: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
ee90: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
eea0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
eeb0: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
eec0: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
eed0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
eee0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
eef0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ef00: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
ef10: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
ef20: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
ef30: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ef40: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ef50: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
ef60: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
ef70: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
ef80: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
ef90: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
efa0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
efb0: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
efc0: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
efd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
efe0: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
eff0: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
f000: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
f010: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
f020: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
f030: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
f040: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
f050: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
f060: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
f070: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
f080: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
f090: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
f0a0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f0b0: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
f0c0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
f0d0: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
f0e0: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
f0f0: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
f100: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
f110: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f120: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
f130: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
f140: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
f150: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
f160: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
f170: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
f180: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
f190: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
f1a0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
f1b0: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
f1c0: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
f1d0: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
f1e0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
f1f0: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
f200: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
f210: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
f220: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
f230: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
f240: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
f250: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
f260: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
f270: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
f280: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
f290: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
f2a0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f2b0: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
f2c0: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
f2d0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
f2e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
f2f0: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
f300: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
f310: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
f320: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
f330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
f340: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
f350: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
f360: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f370: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
f380: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
f390: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
f3a0: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
f3b0: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
f3c0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
f3d0: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
f3e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
f3f0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
f400: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
f410: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
f420: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
f430: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
f440: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
f450: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
f460: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
f470: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
f480: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
f490: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
f4a0: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
f4b0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
f4c0: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
f4d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
f4e0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
f4f0: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
f500: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
f510: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
f520: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
f530: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f540: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f550: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f560: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f570: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f580: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f590: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f5a0: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f5b0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f5c0: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f5d0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f5e0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f5f0: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f600: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f610: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f620: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f630: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f640: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f650: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f660: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f670: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f680: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f690: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f6a0: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f6b0: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f6c0: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f6d0: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f6e0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f6f0: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f700: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f710: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f720: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f730: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f740: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f750: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f760: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f770: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f780: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f790: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f7a0: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f7b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f7c0: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f7d0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f7e0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f7f0: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f800: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f810: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f820: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f830: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f840: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f850: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f860: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f870: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f880: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f890: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f8a0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f8b0: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f8c0: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f8d0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f8e0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f8f0: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f900: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f910: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f920: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f930: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f940: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f950: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f960: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f970: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f980: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f990: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f9a0: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f9b0: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f9c0: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f9d0: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f9e0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
f9f0: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
fa00: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
fa10: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
fa20: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
fa30: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
fa40: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
fa50: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
fa60: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
fa70: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
fa80: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
fa90: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
faa0: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
fab0: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
fac0: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
fad0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
fae0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
faf0: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
fb00: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
fb10: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
fb20: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
fb30: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
fb40: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
fb50: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
fb60: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
fb70: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
fb80: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
fb90: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
fba0: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
fbb0: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
fbc0: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
fbd0: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
fbe0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
fbf0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
fc00: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
fc10: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
fc20: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
fc30: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
fc40: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
fc50: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
fc60: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
fc70: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
fc80: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
fc90: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
fca0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
fcb0: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
fcc0: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
fcd0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
fce0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
fcf0: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
fd00: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
fd10: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
fd20: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
fd30: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
fd40: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
fd50: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
fd60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
fd70: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
fd80: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
fd90: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
fda0: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
fdb0: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
fdc0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
fdd0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
fde0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
fdf0: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
fe00: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
fe10: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
fe20: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fe40: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
fe50: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
fe60: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
fe70: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
fe80: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
fe90: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
fea0: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
feb0: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
fec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
fed0: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
fee0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
fef0: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
ff00: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
ff10: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
ff20: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
ff30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
ff40: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
ff50: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
ff60: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
ff70: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
ff80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ff90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
ffa0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
ffb0: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
ffc0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
ffd0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
ffe0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
fff0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
10000 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
10010 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10020 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
10030 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
10040 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
10050 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
10060 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
10070 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
10080 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
10090 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
100a0 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
100b0 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
100c0 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
100d0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
100e0 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
100f0 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
10100 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
10110 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
10120 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
10130 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
10140 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
10150 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
10160 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
10170 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
101a0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
101b0 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
101c0 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
101d0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
101e0 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
101f0 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
10200 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ble */.  i16 iPK
10210 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
10220 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
10230 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
10240 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a  ] as the rowid *
10250 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
10260 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10270 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10280 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
10290 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
102a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
102b0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
102c0 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c  his Table */.  L
102d0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
102e0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
102f0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
10300 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
10310 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
10320 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
10330 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
10340 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
10350 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
10360 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
10370 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
10380 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
10390 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
103a0 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
103b0 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
103c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
103d0 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
103e0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
103f0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
10400 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
10410 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
10420 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
10430 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
10440 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
10450 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
10460 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
10470 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
10480 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
10490 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
104a0 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
104b0 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
104c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
104d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
104e0 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
104f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10500 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
10510 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
10520 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
10530 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
10540 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
10550 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
10560 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
10570 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
10580 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
10590 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
105a0 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
105b0 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
105c0 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
105d0 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
105e0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
105f0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
10600 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
10610 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
10620 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
10630 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
10640 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
10650 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
10660 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
10670 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
10680 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
10690 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
106a0 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
106b0 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
106c0 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
106d0 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
106e0 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
106f0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
10700 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
10710 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
10720 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
10730 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
10740 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
10750 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10760 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
10770 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
10780 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
10790 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
107a0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
107b0 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
107c0 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
107d0 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
107e0 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
107f0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
10800 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
10810 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
10820 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
10830 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
10840 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
10850 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
10860 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
10870 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
10880 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
10890 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
108a0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
108b0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
108c0 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
108d0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
108e0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
108f0 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
10900 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
10910 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
10920 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
10930 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10940 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
10950 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
10960 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41  No rowid.  PRIMA
10970 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
10980 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
10990 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20  NoVisibleRowid  
109a0 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0x40    /* No us
109b0 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
109c0 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
109d0 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
109e0 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20  n       0x80    
109f0 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
10a00 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
10a10 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  /.../*.** Test t
10a20 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
10a30 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
10a40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
10a50 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
10a60 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
10a70 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
10a80 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
10a90 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
10aa0 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
10ab0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
10ac0 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
10ad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10ae0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
10af0 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
10b00 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  )      (((X)->ta
10b10 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74  bFlags & TF_Virt
10b20 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  ual)!=0).#else.#
10b30 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10b40 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e  al(X)      0.#en
10b50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
10b60 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  s to determine i
10b70 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69  f a column is hi
10b80 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72  dden.  IsOrdinar
10b90 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a  yHiddenColumn().
10ba0 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ** only works fo
10bb0 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61  r non-virtual ta
10bc0 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74  bles (ordinary t
10bd0 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29  ables and views)
10be0 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79   and is.** alway
10bf0 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53  s false unless S
10c00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
10c10 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64  DEN_COLUMNS is d
10c20 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20  efined.  The.** 
10c30 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  IsHiddenColumn()
10c40 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61   macro is genera
10c50 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69  l purpose..*/.#i
10c60 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
10c70 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
10c80 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e  OLUMNS).#  defin
10c90 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
10ca0 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
10cb0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
10cc0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
10cd0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
10ce0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
10cf0 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
10d00 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
10d10 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69  HIDDEN)!=0).#eli
10d20 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
10d30 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
10d40 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49  BLE).#  define I
10d50 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10d60 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
10d70 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
10d80 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
10d90 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
10da0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
10db0 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65  X) 0.#else.#  de
10dc0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
10dd0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30  umn(X)         0
10de0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
10df0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
10e00 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
10e10 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
10e20 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
10e30 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
10e40 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
10e50 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
10e60 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
10e70 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65  .#define Visible
10e80 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e  Rowid(X) (((X)->
10e90 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f  tabFlags & TF_No
10ea0 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30  VisibleRowid)==0
10eb0 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
10ec0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
10ed0 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
10ee0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10ef0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
10f00 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
10f10 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
10f20 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
10f30 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
10f40 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
10f50 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
10f60 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
10f70 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
10f80 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
10f90 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
10fa0 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
10fb0 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
10fc0 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
10fd0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
10fe0 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
10ff0 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
11000 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
11010 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
11020 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
11030 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
11040 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
11050 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
11060 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
11070 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
11080 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
11090 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
110a0 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
110b0 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
110c0 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
110d0 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
110e0 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
110f0 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
11100 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
11110 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
11120 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
11130 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
11140 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
11150 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11160 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
11170 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
11180 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
11190 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
111a0 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
111b0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
111c0 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
111d0 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
111e0 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
111f0 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
11200 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
11210 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
11220 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
11230 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
11240 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
11250 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
11260 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
11270 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
11280 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
11290 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
112a0 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
112b0 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
112c0 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
112d0 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
112e0 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
112f0 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
11300 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
11310 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
11320 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
11330 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
11340 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
11350 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
11360 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
11370 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
11380 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
11390 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
113a0 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
113b0 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
113c0 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
113d0 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
113e0 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
113f0 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
11400 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
11410 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
11420 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
11430 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
11440 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
11450 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11460 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
11470 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
11480 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
11490 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
114a0 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
114b0 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
114c0 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
114d0 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
114e0 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
114f0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
11500 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
11510 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
11520 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
11530 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
11540 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
11550 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
11560 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
11570 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
11580 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
11590 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
115a0 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
115b0 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
115c0 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
115d0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
115e0 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
115f0 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
11600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
11610 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
11620 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
11630 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
11640 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
11650 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
11660 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
11670 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
11680 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
11690 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
116a0 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
116b0 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
116c0 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
116d0 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
116e0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
116f0 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
11700 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
11710 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
11720 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
11730 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
11740 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
11750 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
11760 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
11770 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
11780 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
11790 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
117a0 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
117b0 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
117c0 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
117d0 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
117e0 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
117f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
11800 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
11810 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
11820 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
11830 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
11840 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
11850 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
11860 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
11870 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
11880 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
11890 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
118a0 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
118b0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
118c0 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
118d0 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
118e0 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
118f0 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
11900 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
11910 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
11920 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
11930 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
11940 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
11950 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
11960 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
11970 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
11980 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
11990 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
119a0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
119b0 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
119c0 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
119d0 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
119e0 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
119f0 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
11a00 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
11a10 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
11a20 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
11a30 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
11a40 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
11a50 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
11a60 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
11a70 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
11a80 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
11a90 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
11aa0 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
11ab0 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
11ac0 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
11ad0 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
11ae0 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
11af0 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
11b00 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
11b10 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
11b20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
11b30 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
11b40 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
11b50 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
11b60 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
11b70 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
11b80 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
11b90 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
11ba0 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
11bb0 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
11bc0 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
11bd0 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
11be0 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
11bf0 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
11c00 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
11c10 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
11c20 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
11c30 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
11c40 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
11c50 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
11c60 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
11c70 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
11c80 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
11c90 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
11ca0 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
11cb0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
11cc0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
11cd0 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
11ce0 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
11cf0 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
11d00 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
11d10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
11d20 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
11d30 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
11d40 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
11d50 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
11d60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
11d70 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
11d80 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
11d90 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
11da0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
11db0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
11dc0 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
11dd0 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
11de0 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
11df0 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
11e00 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
11e10 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
11e20 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
11e30 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
11e40 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
11e50 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
11e60 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
11e70 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
11e80 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
11e90 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
11ea0 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
11eb0 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
11ec0 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
11ed0 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
11ee0 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
11ef0 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
11f00 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
11f10 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
11f20 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
11f30 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
11f40 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
11f50 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
11f60 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
11f70 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
11f80 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
11f90 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
11fa0 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
11fb0 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
11fc0 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
11fd0 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
11fe0 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
11ff0 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
12000 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
12010 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
12020 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
12030 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
12040 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
12050 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
12060 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
12070 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12080 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
12090 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
120a0 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
120b0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
120c0 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
120d0 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
120e0 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
120f0 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
12100 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
12110 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
12120 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
12130 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64  */.  u16 nXField
12140 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
12150 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65  er of columns be
12160 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c  yond the key col
12170 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  umns */.  sqlite
12180 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
12190 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
121a0 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
121b0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
121c0 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
121d0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
121e0 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
121f0 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
12200 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
12210 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
12220 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
12230 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
12240 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
12250 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
12260 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
12270 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
12280 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
12290 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
122a0 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
122b0 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
122c0 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
122d0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
122e0 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
122f0 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
12300 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
12310 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
12320 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
12330 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
12340 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
12350 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
12360 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
12370 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
12380 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
12390 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
123a0 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
123b0 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
123c0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
123d0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
123e0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
123f0 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
12400 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
12410 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
12420 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
12430 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
12440 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
12450 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
12460 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
12470 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
12480 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
12490 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
124a0 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
124b0 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
124c0 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
124d0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
124e0 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
124f0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
12500 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
12510 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
12520 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
12530 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
12540 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
12550 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
12560 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
12570 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
12580 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
12590 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
125a0 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
125b0 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
125c0 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
125d0 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
125e0 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
125f0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
12600 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
12610 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
12620 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
12630 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
12640 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
12650 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
12660 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
12670 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
12680 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
12690 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
126a0 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
126b0 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
126c0 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
126d0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
126e0 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
126f0 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
12700 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
12710 74 20 74 6f 20 2d 31 20 74 6f 20 0a 2a 2a 20 63  t to -1 to .** c
12720 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
12730 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
12740 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
12750 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
12760 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
12770 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
12780 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
12790 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
127a0 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
127b0 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
127c0 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
127d0 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
127e0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
127f0 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
12800 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
12810 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
12820 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
12830 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
12840 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
12850 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
12860 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
12870 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
12880 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
12890 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
128a0 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
128b0 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
128c0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
128d0 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
128e0 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
128f0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
12900 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
12910 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12920 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
12930 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
12940 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
12950 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
12960 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
12970 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
12980 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12990 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
129a0 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
129b0 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
129c0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
129d0 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
129e0 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
129f0 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
12a00 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
12a10 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
12a20 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
12a30 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
12a40 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
12a50 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
12a60 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
12a70 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
12a80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12a90 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
12aa0 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
12ab0 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
12ac0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
12ad0 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
12ae0 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
12af0 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
12b00 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
12b10 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
12b20 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
12b30 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
12b40 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
12b50 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
12b60 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
12b70 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
12b80 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
12b90 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
12ba0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
12bb0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
12bc0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
12bd0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
12be0 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
12bf0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
12c00 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
12c10 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12c20 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
12c30 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
12c40 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
12c50 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
12c60 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
12c70 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
12c80 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
12c90 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
12ca0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
12cb0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
12cc0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
12cd0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
12ce0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
12cf0 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
12d00 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
12d10 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
12d20 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
12d30 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
12d40 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
12d50 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
12d60 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
12d70 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
12d80 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
12d90 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
12da0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
12db0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
12dc0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
12dd0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
12de0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
12df0 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
12e00 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
12e10 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
12e20 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
12e30 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
12e40 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
12e50 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
12e60 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
12e70 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
12e80 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
12e90 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
12ea0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
12eb0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
12ec0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
12ed0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
12ee0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
12ef0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
12f00 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
12f10 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
12f20 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
12f30 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
12f40 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
12f50 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
12f60 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
12f70 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
12f80 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
12f90 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
12fa0 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
12fb0 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
12fc0 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
12fd0 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
12fe0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
12ff0 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
13000 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
13010 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
13020 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
13030 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
13040 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
13050 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
13060 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
13070 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
13080 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
13090 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
130a0 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
130b0 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
130c0 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
130d0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
130e0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
130f0 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
13100 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
13110 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
13120 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
13130 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
13140 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
13150 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
13160 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
13170 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
13180 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
13190 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
131a0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
131b0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
131c0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
131d0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
131e0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
131f0 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
13200 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
13210 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
13220 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
13230 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
13240 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
13250 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
13260 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
13270 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
13280 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
13290 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
132a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
132b0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
132c0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
132d0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
132e0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
132f0 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
13300 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
13310 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
13320 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
13330 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
13340 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
13350 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
13360 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
13370 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
13380 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
13390 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
133a0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
133b0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
133c0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
133d0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
133e0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
133f0 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
13400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
13410 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
13420 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
13430 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
13440 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
13450 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
13460 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
13470 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
13480 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
13490 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
134a0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
134b0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
134d0 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
134e0 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
134f0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
13500 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
13510 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
13520 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
13530 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
13540 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
13550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13560 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
13570 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
13580 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
135a0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
135b0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
135c0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
135d0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
135e0 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
135f0 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
13600 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
13610 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
13620 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
13630 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
13640 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
13650 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
13660 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
13670 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
13680 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
13690 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
136a0 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
136b0 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
136c0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
136d0 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
136e0 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
136f0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
13700 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
13710 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
13720 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
13730 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
13740 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
13750 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
13760 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
13770 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
13780 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
13790 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
137a0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
137b0 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
137c0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66  n if true */.#if
137d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
137e0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
137f0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
13800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13810 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
13820 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
13830 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
13840 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
13850 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
13860 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
13870 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
13880 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
13890 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
138a0 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
138b0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
138c0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
138d0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
138e0 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
138f0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
13900 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
13910 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
13920 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
13930 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
13940 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
13950 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
13960 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
13970 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
13980 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
13990 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
139a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
139b0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
139c0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
139d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
139e0 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
139f0 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
13a00 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
13a10 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
13a20 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
13a30 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
13a40 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
13a50 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
13a60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
13a70 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
13a80 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
13a90 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
13aa0 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
13ab0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
13ac0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
13ad0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
13ae0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
13af0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
13b00 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
13b10 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
13b20 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
13b30 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
13b40 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
13b50 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
13b60 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
13b70 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
13b80 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
13b90 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65  ne)../* The Inde
13ba0 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c  x.aiColumn[] val
13bb0 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ues are normally
13bc0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
13bd0 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65  r.  But.** there
13be0 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69   are some negati
13bf0 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68  ve values that h
13c00 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
13c10 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing:.*/.#define 
13c20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31  XN_ROWID     (-1
13c30 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
13c40 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72   column is the r
13c50 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
13c60 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32  XN_EXPR      (-2
13c70 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
13c80 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
13c90 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  pression */../*.
13ca0 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
13cb0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
13cc0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
13cd0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
13ce0 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69  n memory .** usi
13cf0 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
13d00 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
13d10 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
13d20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
13d30 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
13d40 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
13d50 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
13d60 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
13d70 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
13d80 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
13d90 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
13da0 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
13db0 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
13dc0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
13dd0 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
13de0 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
13df0 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
13e00 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
13e10 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
13e20 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
13e30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13e40 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
13e50 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
13e60 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
13e70 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
13e80 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
13e90 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
13ea0 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
13eb0 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
13ec0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
13ed0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
13ee0 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
13ef0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
13f00 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
13f10 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
13f20 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
13f30 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
13f40 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
13f50 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
13f60 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
13f70 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
13f80 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
13f90 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
13fa0 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
13fb0 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
13fc0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
13fd0 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
13fe0 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
13ff0 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
14000 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
14010 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
14020 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
14030 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
14040 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
14050 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
14060 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
14070 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
14080 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
14090 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
140a0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
140b0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
140c0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
140d0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
140e0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
140f0 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
14100 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
14110 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
14120 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
14130 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
14140 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
14150 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
14160 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
14170 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
14180 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
14190 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
141a0 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
141b0 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
141c0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
141d0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
141e0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
141f0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
14200 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
14210 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
14220 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
14230 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
14240 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
14250 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
14260 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
14270 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
14280 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
14290 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
142a0 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
142b0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
142c0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
142d0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
142e0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
142f0 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
14300 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
14310 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
14320 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
14330 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
14340 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
14370 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
14380 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
14390 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
143a0 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
143b0 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
143c0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
143d0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
143e0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
14410 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14420 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
14430 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
14440 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
14450 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
14460 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
14470 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
14480 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
14490 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
144a0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
144b0 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
144c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
144d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
144e0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
144f0 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
14500 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
14510 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
14520 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
14530 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
14540 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
14550 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
14560 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
14570 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
14580 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
14590 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
145a0 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
145b0 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
145c0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
145d0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
145e0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
145f0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
14600 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
14610 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
14620 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
14630 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
14640 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
14650 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
14660 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14670 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
14680 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
14690 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
146a0 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
146b0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
146c0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
146d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
146e0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
146f0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
14700 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
14710 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
14720 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
14730 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
14740 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
14750 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
14760 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14770 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
14780 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
14790 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
147a0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
147b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
147c0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
147d0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
14800 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
14810 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
14820 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
14850 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
14860 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
14870 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
14880 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
14890 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
148a0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
148b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
148c0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
148d0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
148e0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
148f0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
14900 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
14910 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
14920 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
14930 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
14940 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
14950 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
14960 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
14970 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
14980 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
14990 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
149a0 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
149b0 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
149c0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
149d0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
149e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
149f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14a00 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
14a10 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
14a20 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
14a30 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
14a40 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
14a50 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
14a60 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
14a70 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
14a80 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
14a90 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
14aa0 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
14ab0 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
14ac0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
14ad0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
14ae0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
14af0 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
14b00 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
14b10 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
14b20 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
14b30 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
14b40 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
14b50 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
14b60 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
14b70 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
14b80 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
14b90 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
14ba0 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
14bb0 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
14bc0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
14bd0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
14be0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
14bf0 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
14c00 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
14c10 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
14c20 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
14c30 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
14c40 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
14c50 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
14c60 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
14c70 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
14c80 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
14c90 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
14ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
14cb0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
14cc0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
14cd0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
14ce0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
14cf0 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
14d00 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
14d10 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
14d20 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
14d30 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
14d40 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
14d50 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
14d60 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
14d70 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
14d80 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
14d90 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
14da0 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
14db0 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
14dc0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
14dd0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
14de0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
14df0 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
14e00 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
14e10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
14e20 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
14e30 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
14e40 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
14e50 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20  TK_BLOB, .** or 
14e60 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
14e70 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
14e80 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
14e90 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
14ea0 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
14eb0 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
14ec0 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
14ed0 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
14ee0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14ef0 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61   .** variable na
14f00 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
14f10 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14f20 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
14f30 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
14f40 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
14f50 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
14f60 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
14f70 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
14f80 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
14f90 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
14fa0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
14fb0 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
14fc0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
14fd0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
14fe0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
14ff0 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
15000 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
15010 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
15020 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
15030 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
15040 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
15050 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
15060 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
15070 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
15080 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
15090 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
150a0 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
150b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
150c0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
150d0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
150e0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
150f0 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
15100 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
15110 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
15120 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
15130 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
15140 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
15150 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
15160 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
15170 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61  .pList is .** va
15180 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
15190 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
151a0 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
151b0 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
151c0 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
151d0 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
151e0 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
151f0 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
15200 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
15210 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
15220 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
15230 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
15240 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
15250 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
15260 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
15270 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
15280 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
15290 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
152a0 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
152b0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
152c0 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
152d0 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
152e0 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
152f0 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
15300 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
15310 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
15320 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
15330 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
15340 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
15350 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
15360 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
15370 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
15380 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
15390 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
153a0 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
153b0 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  rk .** character
153c0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
153d0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
153e0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
153f0 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a  olds the index .
15400 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
15410 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
15420 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
15430 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
15440 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
15450 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
15460 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
15470 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
15480 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
15490 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
154a0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
154b0 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
154c0 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
154d0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
154e0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
154f0 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
15500 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
15510 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
15520 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
15530 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
15540 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
15550 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
15560 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
15570 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
15580 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
15590 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
155a0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
155b0 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
155c0 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
155d0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
155e0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
155f0 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
15600 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
15610 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
15620 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
15630 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
15640 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
15650 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
15660 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
15670 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
15680 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
15690 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
156a0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
156b0 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
156c0 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
156d0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
156e0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
156f0 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
15700 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
15710 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
15720 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
15730 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
15740 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
15750 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
15760 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
15770 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
15780 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
15790 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
157a0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
157b0 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
157c0 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
157d0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
157e0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
157f0 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
15800 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
15810 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
15820 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
15830 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
15840 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
15850 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
15860 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
15870 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
15880 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
15890 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
158a0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
158b0 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
158c0 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
158d0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
158e0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
158f0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
15900 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
15910 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
15920 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
15930 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
15940 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
15950 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
15960 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
15970 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
15980 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
15990 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
159a0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
159b0 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
159c0 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
159d0 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
159e0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
159f0 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
15a00 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
15a10 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
15a20 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
15a30 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
15a40 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
15a50 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
15a60 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
15a70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
15a80 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
15a90 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
15aa0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
15ab0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
15ac0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15ad0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
15ae0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
15af0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
15b00 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
15b10 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
15b20 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
15b30 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
15b40 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
15b50 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
15b60 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
15b70 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a  function. .  ***
15b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15bc0 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
15bd0 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
15be0 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
15bf0 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
15c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
15c10 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
15c20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
15c30 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
15c40 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
15c50 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
15c60 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
15c70 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
15c80 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
15c90 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
15ca0 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
15cb0 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
15cc0 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
15cd0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
15ce0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
15cf0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
15d00 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
15d10 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
15d20 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
15d30 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
15d40 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
15d50 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
15d60 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
15d70 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
15d80 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
15d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15dd0 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
15de0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
15df0 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
15e00 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
15e10 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
15e20 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
15e30 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
15e40 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
15e50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
15e60 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
15e70 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
15e80 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
15eb0 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
15ec0 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15ee0 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
15ef0 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
15f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f10 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
15f20 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
15f30 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
15f40 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
15f50 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
15f60 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
15f70 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
15f80 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
15fb0 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
15fc0 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
15fd0 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
15fe0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
15ff0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
16000 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
16010 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
16020 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
16030 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
16040 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
16050 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
16060 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
16070 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
16080 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
16090 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
160a0 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
160b0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
160c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
160d0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
160e0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
160f0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
16120 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
16130 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
16140 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
16150 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
16160 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
16170 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
16180 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
16190 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
161a0 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
161b0 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
161c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
161d0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
161e0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
161f0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
16200 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
16210 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
16220 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
16230 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
16240 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
16250 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16260 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
16270 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
16280 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
16290 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
162a0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
162b0 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
162c0 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
162d0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
162e0 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
162f0 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
16300 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
16310 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
16320 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
16330 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
16340 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
16350 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
16360 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
16370 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
16380 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
16390 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
163a0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
163b0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
163c0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
163d0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
163e0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
163f0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
16400 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
16410 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
16420 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
16430 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
16440 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
16450 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
16460 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
16470 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
16480 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
16490 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
164a0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
164b0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
164c0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
164d0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
164e0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
164f0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
16500 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
16510 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
16520 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
16530 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
16540 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
16550 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
16560 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
16570 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
16580 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
16590 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
165a0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
165b0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
165c0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
165d0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
165e0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
165f0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
16600 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
16610 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
16620 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
16630 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
16640 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
16650 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
16660 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
16670 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
16680 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
16690 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
166a0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
166b0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
166c0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
166d0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
166e0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
166f0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
16700 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
16710 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
16720 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
16730 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
16740 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
16750 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
16760 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
16770 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
16780 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
16790 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
167a0 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
167b0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
167c0 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
167d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
167e0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
167f0 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
16800 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
16810 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
16820 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
16830 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
16840 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
16850 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
16860 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
16870 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
16880 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
16890 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
168a0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
168b0 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69  ./*.** Combinati
168c0 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f  ons of two or mo
168d0 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f  re EP_* flags.*/
168e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
168f0 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
16900 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f  e|EP_Subquery) /
16910 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65 73  * Propagate thes
16920 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20 2a  e bits up tree *
16930 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
16940 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
16950 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
16960 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
16970 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
16980 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
16990 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
169a0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
169b0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
169c0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
169d0 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
169e0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
169f0 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
16a00 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
16a10 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
16a20 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
16a30 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
16a40 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
16a50 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
16a60 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
16a70 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
16a80 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
16a90 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
16aa0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
16ab0 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
16ac0 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
16ad0 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
16ae0 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
16af0 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
16b00 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
16b10 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
16b20 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
16b30 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
16b40 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
16b50 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
16b60 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
16b70 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
16b80 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
16b90 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
16ba0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
16bb0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
16bc0 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
16bd0 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
16be0 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
16bf0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
16c00 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
16c10 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
16c20 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
16c30 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
16c40 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
16c50 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
16c60 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
16c70 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
16c80 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
16c90 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
16ca0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
16cb0 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
16cc0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
16cd0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
16ce0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
16cf0 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
16d00 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
16d10 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
16d20 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
16d30 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
16d40 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
16d50 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
16d60 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
16d70 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
16d80 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
16d90 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
16da0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
16db0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
16dc0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
16dd0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
16de0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
16df0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
16e00 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
16e10 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
16e20 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
16e30 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
16e40 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
16e50 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
16e60 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
16e70 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
16e80 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
16e90 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
16ea0 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
16eb0 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
16ec0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
16ed0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
16ee0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
16ef0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
16f00 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
16f10 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
16f20 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
16f30 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
16f40 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
16f50 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
16f60 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
16f70 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
16f80 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
16f90 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
16fa0 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
16fb0 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
16fc0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
16fd0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
16fe0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
16ff0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
17000 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
17010 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
17020 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
17030 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
17040 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
17050 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
17060 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
17070 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
17080 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
17090 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
170a0 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
170b0 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
170c0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
170d0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
170e0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
170f0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
17100 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
17110 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
17120 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
17130 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
17140 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
17150 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
17160 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
17170 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
17180 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17190 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
171a0 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
171b0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
171c0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
171d0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
171e0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
171f0 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
17200 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17210 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
17220 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
17230 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
17240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
17250 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
17260 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
17270 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
17280 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
17290 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
172a0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
172b0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
172c0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
172d0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
172e0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
172f0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
17300 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
17310 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
17320 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
17330 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
17340 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
17350 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
17360 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
17370 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
17380 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
17390 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
173a0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
173b0 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
173c0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
173d0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
173e0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
173f0 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
17400 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
17410 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
17420 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
17430 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
17440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
17450 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
17460 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
17470 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
17480 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
17490 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
174a0 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
174b0 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
174c0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
174d0 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
174f0 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
17500 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
17510 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
17520 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
17530 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
17540 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
17550 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
17560 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
17570 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
17580 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
17590 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
175a0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
175b0 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
175c0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
175d0 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
175e0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
175f0 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
17600 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
17610 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
17620 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
17630 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
17640 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
17650 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
17660 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
17670 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
17680 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
17690 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
176a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
176b0 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
176c0 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
176d0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
176e0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
176f0 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
17700 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
17710 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
17720 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
17730 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
17740 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
17750 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
17760 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
17770 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
17780 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
17790 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
177a0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
177b0 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
177c0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
177d0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
177e0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
177f0 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
17800 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
17810 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
17820 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
17830 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
17840 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
17850 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
17860 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
17870 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
17880 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
17890 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
178a0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
178b0 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
178c0 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
178d0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
178e0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
178f0 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
17900 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
17910 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
17920 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
17930 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
17940 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
17950 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
17960 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
17970 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17980 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
17990 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
179a0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
179b0 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
179c0 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
179d0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
179e0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
179f0 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
17a00 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
17a10 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
17a20 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
17a30 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
17a40 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
17a50 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
17a60 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
17a70 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
17a80 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
17a90 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
17aa0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
17ab0 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
17ac0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
17ad0 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
17ae0 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
17af0 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
17b00 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
17b10 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
17b20 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
17b30 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d   A bit in a Bitm
17b40 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ask.*/.#define M
17b50 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42  ASKBIT(n)   (((B
17b60 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a  itmask)1)<<(n)).
17b70 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33  #define MASKBIT3
17b80 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64  2(n) (((unsigned
17b90 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f   int)1)<<(n))../
17ba0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
17bb0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
17bc0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
17bd0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
17be0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17bf0 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
17c00 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
17c10 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
17c20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
17c30 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
17c40 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
17c50 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
17c60 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
17c70 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
17c80 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
17c90 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
17ca0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
17cb0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
17cc0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
17cd0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
17ce0 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
17cf0 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
17d00 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
17d10 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
17d20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
17d30 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
17d40 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
17d50 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
17d60 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
17d70 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
17d80 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
17d90 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
17da0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
17db0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
17dc0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
17dd0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
17de0 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
17df0 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
17e00 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
17e10 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
17e20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
17e30 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
17e40 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
17e50 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
17e60 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
17e70 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
17e80 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
17e90 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
17ea0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
17eb0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
17ec0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
17ed0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
17ee0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
17ef0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
17f00 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
17f10 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
17f20 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
17f30 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
17f40 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
17f50 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
17f60 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
17f70 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
17f80 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
17f90 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
17fa0 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
17fb0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
17fc0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
17fd0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
17fe0 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
17ff0 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
18000 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
18010 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
18020 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
18030 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
18040 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
18050 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
18060 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
18070 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
18080 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
18090 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
180a0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
180b0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
180c0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
180d0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
180e0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
180f0 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
18100 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
18110 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
18120 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
18130 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
18140 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
18150 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
18160 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
18170 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
18180 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
18190 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
181a0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
181b0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
181c0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
181d0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
181e0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
181f0 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
18200 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
18210 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
18220 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
18230 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
18240 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
18250 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
18260 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
18270 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
18280 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
18290 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
182a0 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ne */.    struct
182b0 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e   {.      u8 join
182c0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
182d0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
182e0 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
182f0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
18300 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18310 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
18320 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
18330 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
18340 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
18350 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
18360 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
18370 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
18380 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
18390 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
183a0 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
183b0 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
183c0 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
183d0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
183e0 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
183f0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
18400 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
18410 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
18420 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
18430 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
18440 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
18450 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
18460 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
18470 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18480 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
18490 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
184a0 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
184b0 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
184c0 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53   } fg;.#ifndef S
184d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
184e0 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
184f0 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
18500 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
18510 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
18520 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
18530 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
18540 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
18550 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
18560 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
18570 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
18580 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
18590 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
185a0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
185b0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
185c0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
185d0 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
185e0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
185f0 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
18600 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
18610 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
18620 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
18630 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
18640 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
18650 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
18660 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
18670 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
18680 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
18690 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
186a0 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
186b0 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
186c0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
186d0 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
186e0 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
186f0 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
18700 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
18710 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
18720 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
18730 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
18740 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
18750 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
18760 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
18770 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
18780 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
18790 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
187a0 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
187b0 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
187c0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
187d0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
187e0 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
187f0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
18800 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
18810 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
18820 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
18830 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
18840 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
18850 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
18860 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
18870 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
18880 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
18890 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
188a0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
188b0 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
188c0 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
188d0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
188e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
188f0 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
18900 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
18910 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
18920 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
18930 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
18940 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
18950 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
18960 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
18970 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
18980 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
18990 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
189a0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
189b0 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
189c0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
189d0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
189e0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
189f0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
18a00 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
18a10 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
18a20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
18a30 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
18a40 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
18a50 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
18a60 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
18a70 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
18a80 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
18a90 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
18aa0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
18ab0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
18ac0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
18ad0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
18ae0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
18af0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
18b00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18b10 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
18b20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
18b30 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
18b40 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
18b50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18b60 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
18b70 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
18b80 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
18b90 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
18ba0 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
18bb0 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
18bc0 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
18bd0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
18be0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
18bf0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
18c00 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
18c10 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
18c20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
18c30 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
18c40 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e   WHERE_NO_AUTOIN
18c50 44 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f  DEX     0x0080 /
18c60 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d  * Disallow autom
18c70 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
18c80 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
18c90 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
18ca0 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
18cb0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
18cc0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
18cd0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18ce0 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20  BY       0x0200 
18cf0 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
18d00 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
18d10 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
18d20 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
18d30 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30  STINCT    0x0400
18d40 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
18d50 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
18d60 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
18d70 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
18d80 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20        0x0800 /* 
18d90 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
18da0 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
18db0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18dc0 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20  REOPEN_IDX      
18dd0 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74   0x1000 /* Try t
18de0 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  o use OP_ReopenI
18df0 64 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  dx */.#define WH
18e00 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
18e10 49 52 4f 57 20 30 78 32 30 30 30 20 2f 2a 20 4f  IROW 0x2000 /* O
18e20 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
18e30 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
18e40 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
18e50 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
18e60 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
18e70 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
18e80 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
18e90 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
18ea0 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
18eb0 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
18ec0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18ed0 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
18ee0 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
18ef0 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
18f00 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18f10 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
18f20 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
18f30 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
18f40 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
18f50 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
18f60 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
18f70 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
18f80 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
18f90 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
18fa0 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
18fb0 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
18fc0 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
18fd0 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
18fe0 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
18ff0 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
19000 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
19010 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
19020 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
19030 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
19040 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
19050 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
19060 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
19070 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
19080 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
19090 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
190a0 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
190b0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
190c0 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
190d0 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
190e0 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
190f0 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
19100 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
19110 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
19120 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
19130 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
19140 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
19150 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
19160 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
19170 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
19180 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
19190 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
191a0 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
191b0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
191c0 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
191d0 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
191e0 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
191f0 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
19200 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
19210 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
19220 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
19230 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
19240 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
19250 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
19260 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
19270 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
19280 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
19290 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
192a0 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
192b0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
192c0 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
192d0 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
192e0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
192f0 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
19300 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
19310 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
19320 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19330 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
19340 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
19350 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
19360 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
19370 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
19380 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
19390 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
193a0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
193b0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
193c0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
193d0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
193e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
193f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19400 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19410 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
19420 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
19430 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
19440 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
19450 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
19460 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
19470 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
19480 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
19490 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
194a0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
194b0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
194c0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
194d0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
194e0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
194f0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
19500 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
19510 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
19520 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
19530 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
19540 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19550 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
19560 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
19570 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
19580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19590 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
195a0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
195b0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
195c0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
195d0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
195e0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
195f0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
19600 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
19610 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
19620 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
19630 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
19640 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
19650 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
19660 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
19670 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
19680 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
19690 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
196a0 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e  X..** .*/.#defin
196b0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
196c0 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
196d0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
196e0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
196f0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
19700 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f  Agg    0x0002  /
19710 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
19720 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19730 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
19740 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
19750 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
19760 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
19770 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
19780 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
19790 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
197a0 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
197b0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
197c0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
197d0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
197e0 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
197f0 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0010  /* True if
19800 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
19810 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
19820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
19830 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
19840 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
19850 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
19860 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
19870 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
19880 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
19890 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
198a0 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
198b0 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
198c0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
198d0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
198e0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
198f0 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
19900 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
19910 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
19920 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
19930 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
19940 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
19950 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
19960 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
19970 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
19980 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
19990 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
199a0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
199b0 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
199c0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
199d0 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
199e0 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
199f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
19a00 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
19a10 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
19a20 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
19a30 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
19a40 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
19a50 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
19a60 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
19a70 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
19a80 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
19a90 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
19aa0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
19ab0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
19ac0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
19ad0 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
19ae0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
19af0 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
19b00 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
19b10 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
19b20 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
19b30 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
19b40 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
19b50 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
19b60 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
19b70 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
19b80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
19b90 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
19ba0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
19bb0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
19bc0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
19bd0 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
19be0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
19bf0 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
19c00 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
19c10 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
19c20 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
19c30 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
19c40 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
19c50 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
19c60 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
19c70 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
19c80 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
19c90 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
19ca0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
19cb0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
19cc0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
19cd0 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
19ce0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
19cf0 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
19d00 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
19d10 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
19d20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
19d30 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
19d60 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
19d70 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
19d80 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
19d90 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
19da0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
19db0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
19dc0 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
19dd0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19de0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
19df0 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
19e00 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
19e10 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
19e20 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
19e30 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
19e40 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
19e50 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
19e60 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
19e70 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
19e80 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
19e90 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
19ea0 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
19eb0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
19ec0 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
19ed0 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
19ee0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
19ef0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
19f00 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
19f10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19f20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
19f30 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
19f40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
19f50 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
19f60 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
19f70 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
19f80 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
19f90 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
19fa0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
19fb0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
19fc0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
19fd0 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
19fe0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
19ff0 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1a000 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1a010 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1a020 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1a030 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1a040 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1a050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1a060 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1a070 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1a080 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1a090 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1a0a0 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1a0b0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1a0c0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
1a0d0 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
1a0e0 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
1a0f0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1a100 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1a110 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1a120 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1a130 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1a140 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1a150 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1a160 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1a170 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1a180 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1a190 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1a1a0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1a1b0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
1a1c0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1a1d0 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
1a1e0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1a1f0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1a200 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30               0x0
1a220 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1a230 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1a240 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1a250 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
1a260 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  x0004  /* Identi
1a270 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1a280 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1a290 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1a2a0 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f         0x0008  /
1a2b0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1a2c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1a2d0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1a2e0 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
1a2f0 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  010  /* Uses the
1a300 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1a310 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1a320 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1a330 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 73      0x0020  /* s
1a340 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1a350 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1a360 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1a370 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1a380 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52 4f    0x0040  /* FRO
1a390 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1a3a0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1a3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1a3c0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
1a3d0 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0080  /* Part o
1a3e0 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1a3f0 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1a400 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1a410 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e 74   0x0100  /* Synt
1a420 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1a430 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1a440 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1a450 6c 75 65 20 20 20 20 20 20 30 78 30 32 30 30 20  lue      0x0200 
1a460 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1a470 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1a480 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1a490 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1a4a0 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30 20 20  om      0x0400  
1a4b0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1a4c0 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1a4d0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1a4e0 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1a4f0 74 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20  t    0x0800  /* 
1a500 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1a510 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1a520 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1a530 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1a540 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
1a550 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1a560 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1a570 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1a580 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1a590 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68 65    0x2000  /* The
1a5a0 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1a5b0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1a5c0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1a5d0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1a5e0 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20 63   0x4000  /* By c
1a5f0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1a600 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1a610 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1a620 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 20 30  ncludeHidden   0
1a630 78 38 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  x8000  /* Includ
1a640 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1a650 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a   in output */...
1a660 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1a670 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1a680 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1a690 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a6a0 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1a6b0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1a6c0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1a6d0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1a6e0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1a6f0 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1a700 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1a710 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1a720 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1a730 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1a740 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20   index .**      
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a760 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1a770 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1a780 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1a790 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1a7a0 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1a7b0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1a7c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1a7d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1a7e0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1a7f0 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1a800 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1a810 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1a820 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a830 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1a840 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1a850 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1a860 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1a870 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1a880 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1a890 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1a8a0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1a8b0 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1a8c0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1a8d0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1a900 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1a910 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1a920 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1a930 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1a940 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1a950 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1a960 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1a970 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1a980 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1a990 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1a9a0 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1a9b0 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1a9c0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1a9d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a9e0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1a9f0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1aa00 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1aa10 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1aa20 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1aa30 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1aa40 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1aa50 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1aa70 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1aa80 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1aa90 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1aac0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1aad0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1aae0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1ab00 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1ab10 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1ab20 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1ab30 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1ab40 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1ab50 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1ab60 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1ab70 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1aba0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1abb0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1abc0 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  . .**           
1abd0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1abe0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1abf0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1ac00 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1ac30 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1ac40 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1ac50 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1ac60 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1ac70 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1ac80 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1ac90 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1acc0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1acd0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1ace0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ad00 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1ad10 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1ad20 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1ad50 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1ad60 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1ad70 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1ad80 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1ad90 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1ada0 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1adb0 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1adc0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1add0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1ade0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ae00 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1ae10 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1ae20 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1ae50 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1ae60 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1ae70 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1aea0 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1aeb0 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1aec0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1aef0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1af00 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1af10 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1af20 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1af30 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1af40 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1af50 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1af60 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1af70 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1af80 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1af90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1afa0 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1afb0 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1afc0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1afd0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1afe0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1aff0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1b000 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1b010 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1b040 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1b050 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1b060 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1b070 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1b080 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1b090 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1b0a0 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1b0b0 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1b0c0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1b0d0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0f0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1b100 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1b110 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1b120 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1b150 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1b160 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1b170 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1b180 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b190 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1b1a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1b1b0 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1b1d0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1b1e0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1b1f0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1b200 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1b220 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1b230 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1b240 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1b250 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1b260 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1b270 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1b2a0 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1b2b0 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1b2c0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1b2e0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1b2f0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1b300 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1b310 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1b320 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1b330 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1b340 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1b350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b360 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1b370 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1b380 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1b390 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1b3a0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1b3b0 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1b3c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1b3d0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1b3e0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1b3f0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1b400 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1b410 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1b420 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1b430 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1b440 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1b450 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1b460 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1b470 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1b480 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1b490 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1b4a0 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1b4b0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1b4c0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1b4d0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1b4e0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1b4f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1b500 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1b510 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1b520 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1b530 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1b540 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1b550 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1b560 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1b570 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1b580 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1b590 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1b5a0 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1b5b0 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1b5c0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1b5d0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1b5e0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1b5f0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1b600 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1b610 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1b620 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1b630 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1b640 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1b650 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1b660 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1b670 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1b680 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1b690 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1b6a0 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1b6b0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1b6c0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1b6d0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1b6e0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1b6f0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1b700 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1b710 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1b720 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1b730 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1b740 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1b750 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1b760 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1b770 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1b780 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1b790 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1b7a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b7b0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1b7c0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1b7d0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1b7e0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1b7f0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1b800 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1b810 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1b820 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1b830 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1b840 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1b850 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1b860 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1b870 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1b880 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1b890 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1b8a0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1b8b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1b8c0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1b8d0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1b8e0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1b8f0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1b900 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1b910 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1b920 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1b930 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1b940 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1b950 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1b960 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1b970 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1b980 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1b990 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1b9a0 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1b9b0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
1b9c0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1b9d0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1b9e0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1b9f0 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1ba00 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1ba10 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1ba20 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1ba30 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1ba40 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1ba50 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1ba60 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1ba70 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1ba80 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1ba90 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1baa0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1bab0 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1bac0 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
1bad0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1bae0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1baf0 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1bb00 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1bb10 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1bb20 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1bb30 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1bb40 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1bb50 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1bb60 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1bb70 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1bb80 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1bb90 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1bba0 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1bbb0 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1bbc0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1bbd0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1bbe0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1bbf0 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1bc00 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1bc10 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1bc20 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1bc30 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1bc40 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1bc50 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1bc60 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1bc70 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1bc80 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1bc90 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
1bca0 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
1bcb0 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
1bcc0 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
1bcd0 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
1bce0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
1bcf0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1bd00 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1bd10 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1bd20 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bd30 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1bd40 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
1bd50 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1bd60 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1bd70 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1bd80 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1bd90 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1bda0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1bdb0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1bdc0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1bdd0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1bde0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1bdf0 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1be00 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1be10 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1be20 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1be30 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1be40 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1be50 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1be60 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1be70 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1be80 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1be90 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1bea0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1beb0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1bec0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1bed0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1bee0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1bef0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1bf00 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1bf10 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1bf20 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1bf30 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1bf40 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1bf50 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1bf60 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1bf70 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1bf80 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1bf90 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1bfa0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bfb0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1bfc0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1bfd0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1bfe0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1bff0 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
1c000 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1c010 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1c020 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1c030 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1c040 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1c050 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1c060 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1c070 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1c080 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1c090 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1c0a0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1c0b0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1c0c0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1c0d0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1c0e0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1c0f0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1c100 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1c110 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1c120 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1c130 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1c140 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1c150 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1c160 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1c170 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1c180 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1c190 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1c1a0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1c1b0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1c1c0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1c1d0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1c1e0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1c1f0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1c200 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1c210 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1c220 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1c230 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1c240 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1c250 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1c260 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1c270 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1c280 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1c290 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1c2a0 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1c2b0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1c2c0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1c2d0 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1c2e0 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1c2f0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1c300 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1c310 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1c320 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1c330 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1c340 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1c350 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1c360 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1c370 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1c380 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1c390 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1c3a0 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1c3b0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1c3c0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1c3d0 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1c3e0 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1c3f0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1c400 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1c410 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1c420 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1c430 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1c440 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1c450 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1c460 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1c470 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1c480 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1c490 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1c4a0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1c4b0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1c4c0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1c4d0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1c4e0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1c4f0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1c500 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1c510 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1c520 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1c530 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1c540 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1c550 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1c560 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1c570 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1c580 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1c590 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1c5a0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1c5b0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1c5c0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1c5d0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1c5e0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1c5f0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1c600 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1c610 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1c620 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1c630 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1c640 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1c650 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1c660 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1c670 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1c680 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1c690 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
1c6a0 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1c6b0 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1c6c0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1c6d0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1c6e0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1c6f0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1c700 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1c710 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1c720 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1c730 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1c740 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1c750 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1c760 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1c770 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1c780 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1c790 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1c7a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c7b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1c7c0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1c7d0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1c7e0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1c7f0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1c800 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1c810 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1c820 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1c830 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1c840 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1c850 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1c860 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1c870 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1c880 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1c890 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1c8a0 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1c8b0 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1c8c0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1c8d0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1c8e0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1c8f0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1c900 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1c910 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1c920 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c930 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1c940 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1c950 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c960 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1c970 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c980 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1c990 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1c9a0 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1c9b0 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1c9c0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1c9d0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1c9e0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1c9f0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1ca00 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1ca10 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1ca20 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1ca30 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1ca40 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1ca50 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1ca60 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1ca70 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1ca80 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1ca90 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1caa0 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1cab0 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1cac0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  stants */.  int 
1cad0 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
1cae0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
1caf0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
1cb00 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
1cb10 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1cb20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1cb30 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1cb40 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1cb50 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1cb60 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1cb70 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1cb80 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1cb90 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1cba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1cbb0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1cbc0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1cbd0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1cbe0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1cbf0 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1cc00 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1cc10 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1cc20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cc30 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1cc40 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1cc50 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
1cc60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cc70 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
1cc80 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1cc90 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
1cca0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
1ccb0 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
1ccc0 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
1ccd0 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1cce0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ccf0 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1cd00 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1cd10 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f  */.  int iFixedO
1cd20 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76  p;        /* Nev
1cd30 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f  er back out opco
1cd40 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f  des iFixedOp-1 o
1cd50 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69  r earlier */.  i
1cd60 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
1cd70 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1cd80 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
1cd90 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
1cda0 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
1cdb0 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
1cdc0 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69  /* Table of an i
1cdd0 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73  ndex whose exprs
1cde0 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1cdf0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1ce00 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1ce10 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1ce20 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1ce30 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1ce40 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1ce50 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1ce60 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1ce70 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1ce80 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1ce90 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1cea0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ceb0 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1cec0 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1ced0 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1cee0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1cef0 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1cf00 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1cf10 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1cf20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1cf30 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1cf40 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1cf50 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1cf60 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1cf70 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1cf80 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1cf90 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1cfa0 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1cfb0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1cfc0 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1cfd0 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1cfe0 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1cff0 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1d000 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1d010 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1d020 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1d030 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1d040 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1d050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1d060 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1d070 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1d080 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1d090 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1d0a0 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1d0b0 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1d0c0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1d0d0 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1d0e0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1d0f0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1d100 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1d110 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1d120 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1d130 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1d140 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1d150 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1d160 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1d170 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1d180 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1d190 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1d1a0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1d1b0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1d1c0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1d1d0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1d1e0 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1d1f0 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1d200 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1d210 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1d220 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1d230 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1d240 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1d250 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1d260 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1d270 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1d280 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1d290 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1d2a0 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1d2b0 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1d2c0 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1d2d0 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1d2e0 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1d2f0 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1d300 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1d310 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1d320 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1d330 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1d340 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d350 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1d360 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1d370 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1d380 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1d390 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1d3a0 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1d3b0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1d3c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1d3d0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1d3e0 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1d3f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d400 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1d410 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1d420 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1d430 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1d440 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1d450 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1d460 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1d470 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1d480 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1d490 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1d4a0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1d4b0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1d4c0 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1d4d0 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1d4e0 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1d4f0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1d500 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1d510 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1d520 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1d530 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1d540 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1d550 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1d560 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1d570 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1d580 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1d590 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1d5a0 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1d5b0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1d5c0 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1d5d0 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1d5e0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1d5f0 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1d600 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1d610 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1d620 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1d630 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1d640 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1d650 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1d660 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1d670 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1d680 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1d690 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1d6a0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1d6b0 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1d6c0 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1d6d0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1d6e0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1d6f0 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1d700 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1d710 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1d720 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1d730 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1d740 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1d750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d790 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
1d7a0 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
1d7b0 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
1d7c0 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
1d7d0 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
1d7e0 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
1d7f0 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
1d800 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
1d810 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
1d820 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
1d830 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
1d840 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65  rse,nVar) so the
1d850 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74   nVar field must
1d860 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69   be the first fi
1d870 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20  eld.  ** in the 
1d880 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1d890 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1d8a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d8b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d8c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d8d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1d8e0 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
1d8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d900 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1d910 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1d920 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1d930 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
1d940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1d950 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
1d960 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
1d970 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  r[] */.  u8 iPkS
1d980 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
1d990 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
1d9a0 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
1d9b0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
1d9c0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1d9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1d9e0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1d9f0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1da00 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1da10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1da20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1da30 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1da40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1da50 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1da60 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1da70 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1da80 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1da90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1daa0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1dab0 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1dac0 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dae0 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1daf0 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1db00 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1db10 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1db20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1db30 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1db40 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1db50 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1db60 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1db70 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1db80 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1db90 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1dba0 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1dbb0 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1dbc0 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1dbd0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1dbe0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1dbf0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1dc00 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1dc10 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1dc20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1dc30 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1dc40 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1dc50 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1dc60 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1dc70 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1dc80 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1dc90 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1dca0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1dcb0 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1dcc0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1dcd0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1dce0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1dcf0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1dd00 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1dd10 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1dd20 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1dd30 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1dd40 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1dd50 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1dd60 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1dd70 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1dd80 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1dd90 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1dda0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1ddb0 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1ddc0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1ddd0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1dde0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1ddf0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1de00 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1de10 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1de20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1de30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1de40 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1de50 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1de60 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1de70 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1de80 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1de90 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1dea0 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1deb0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1dec0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1ded0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1dee0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1def0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1df00 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1df10 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1df20 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1df30 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1df40 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1df50 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1df60 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1df70 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1df80 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1df90 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1dfa0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1dfc0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1dfd0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1dfe0 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
1dff0 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
1e000 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
1e010 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
1e020 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d  f the parse */.}
1e030 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1e040 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1e050 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1e060 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1e070 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1e080 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1e090 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1e0a0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1e0b0 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1e0c0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1e0d0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1e0e0 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1e0f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1e100 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1e110 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1e120 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1e130 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1e140 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1e150 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1e160 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1e170 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1e180 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1e190 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1e1a0 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1e1b0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1e1c0 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1e1d0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1e1e0 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1e1f0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e210 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1e220 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1e230 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1e240 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1e250 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1e260 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1e270 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1e280 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1e290 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1e2a0 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1e2b0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1e2c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1e2d0 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1e2e0 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1e2f0 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1e300 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1e310 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1e320 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1e330 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1e340 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1e350 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1e360 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1e370 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1e380 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1e390 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1e3a0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1e3b0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1e3c0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1e3d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e3e0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1e3f0 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1e400 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1e410 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1e420 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e430 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1e440 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1e450 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1e460 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1e470 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1e480 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1e490 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1e4a0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1e4b0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1e4c0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1e4d0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1e4e0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1e4f0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1e500 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1e510 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1e520 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1e530 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1e540 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1e550 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1e560 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1e570 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
1e580 5f 4f 70 65 6e 20 69 73 20 6f 70 65 6e 69 6e 67  _Open is opening
1e590 20 66 6f 72 2d 64 65 6c 65 74 65 20 63 73 72 20   for-delete csr 
1e5a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e5b0 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
1e5c0 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
1e5d0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
1e5e0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
1e5f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e600 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
1e610 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1e620 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
1e630 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
1e640 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1e650 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1e660 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1e670 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1e680 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1e690 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1e6a0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
1e6b0 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
1e6c0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
1e6d0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
1e6e0 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
1e6f0 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
1e700 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
1e710 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
1e720 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
1e730 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
1e740 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1e750 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1e760 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1e770 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1e780 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1e790 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1e7a0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1e7b0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1e7c0 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1e7d0 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1e7e0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1e7f0 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1e800 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1e810 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1e820 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1e830 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1e840 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1e850 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1e860 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1e870 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1e880 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1e890 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1e8a0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1e8b0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1e8c0 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1e8d0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1e8e0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1e8f0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1e900 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1e910 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1e920 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1e930 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1e940 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e960 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1e970 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1e980 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1e990 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1e9a0 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1e9b0 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e9d0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1e9e0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1e9f0 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1ea00 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ea20 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1ea30 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1ea40 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1ea50 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1ea60 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1ea70 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1ea80 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1ea90 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1eaa0 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1eab0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1eac0 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1ead0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1eae0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1eb10 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1eb20 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1eb30 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1eb40 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1eb50 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1eb60 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1eb70 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1eb80 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1eb90 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1eba0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1ebb0 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1ebc0 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1ebd0 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1ebf0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1ec00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1ec10 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1ec20 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1ec30 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1ec40 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1ec50 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1ec60 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1ec70 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1ec80 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1ec90 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
1eca0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1ecb0 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1ecc0 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1ecd0 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1ece0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1ecf0 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1ed00 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1ed10 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1ed20 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1ed30 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1ed40 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1ed50 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1ed60 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1ed70 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1ed80 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1ed90 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1eda0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1edb0 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1edc0 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1edd0 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
1ede0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1edf0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1ee00 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1ee10 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1ee20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1ee30 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1ee40 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1ee50 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1ee60 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1ee70 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
1ee80 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
1ee90 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
1eea0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1eeb0 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
1eec0 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
1eed0 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
1eee0 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1eef0 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
1ef00 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
1ef10 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1ef20 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
1ef30 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
1ef40 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
1ef50 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
1ef60 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
1ef70 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
1ef80 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
1ef90 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
1efa0 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1efb0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1efc0 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1efd0 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1efe0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1eff0 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1f000 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1f010 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1f020 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1f030 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1f040 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f050 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1f060 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1f070 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1f080 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1f090 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1f0a0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1f0b0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1f0c0 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1f0d0 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1f0e0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1f0f0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1f100 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1f110 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1f120 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1f130 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1f140 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1f150 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1f160 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1f170 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1f180 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1f190 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1f1a0 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1f1b0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1f1c0 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1f1d0 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1f1e0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1f1f0 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1f200 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1f210 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
1f220 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1f230 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1f240 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
1f250 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
1f260 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1f270 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
1f280 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
1f290 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1f2a0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1f2b0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1f2c0 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
1f2d0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
1f2e0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1f2f0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1f300 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1f310 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
1f320 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1f330 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1f340 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1f350 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1f360 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1f370 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1f380 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1f390 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1f3a0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1f3b0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1f3c0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1f3d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1f3e0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1f3f0 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1f400 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1f410 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1f420 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1f430 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1f440 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1f450 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1f460 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1f470 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1f480 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1f490 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1f4a0 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1f4b0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1f4c0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1f4d0 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1f4e0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1f4f0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1f500 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1f510 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1f520 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1f530 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
1f540 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1f550 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
1f560 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
1f570 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
1f580 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
1f590 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
1f5a0 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1f5b0 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1f5c0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1f5d0 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1f5e0 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1f5f0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1f600 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1f610 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1f620 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1f630 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1f640 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1f650 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1f660 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1f670 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1f680 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1f690 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1f6a0 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1f6b0 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1f6c0 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1f6d0 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1f6e0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1f6f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1f700 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1f710 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1f720 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1f730 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1f740 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1f750 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1f760 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1f770 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1f780 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1f790 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1f7a0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1f7b0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1f7c0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1f7d0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1f7e0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1f7f0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1f800 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1f810 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1f820 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1f830 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1f840 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1f850 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1f860 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1f870 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f880 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1f890 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1f8a0 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1f8b0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1f8c0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1f8d0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1f8e0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1f8f0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1f900 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1f910 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1f920 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1f930 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1f940 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1f950 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1f960 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1f970 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1f980 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1f990 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1f9a0 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1f9b0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1f9c0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1f9d0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1f9e0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1f9f0 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1fa00 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1fa10 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
1fa20 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
1fa30 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
1fa40 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
1fa50 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
1fa60 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
1fa70 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
1fa80 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
1fa90 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
1faa0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
1fab0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
1fac0 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
1fad0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
1fae0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
1faf0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1fb00 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
1fb10 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
1fb20 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
1fb30 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
1fb40 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
1fb50 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
1fb60 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
1fb70 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
1fb80 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
1fb90 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1fba0 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1fbb0 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1fbc0 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
1fbd0 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
1fbe0 2f 2a 20 7a 54 65 78 74 20 70 6f 69 6e 74 73 20  /* zText points 
1fbf0 74 6f 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  to allocated spa
1fc00 63 65 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  ce */.};.#define
1fc10 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
1fc20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
1fc30 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a  CCUM_TOOBIG  2..
1fc40 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
1fc50 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
1fc60 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
1fc70 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
1fc80 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
1fc90 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
1fca0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
1fcb0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
1fcc0 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
1fcd0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
1fce0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1fcf0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
1fd00 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
1fd10 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
1fd20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
1fd30 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1fd40 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1fd50 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1fd60 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
1fd70 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
1fd80 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
1fd90 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
1fda0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1fdb0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
1fdc0 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
1fdd0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
1fde0 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
1fdf0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
1fe00 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
1fe10 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
1fe20 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
1fe30 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
1fe40 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
1fe50 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
1fe60 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1fe70 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
1fe80 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1feb0 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
1fec0 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
1fed0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fef0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
1ff00 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
1ff10 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1ff40 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
1ff50 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
1ff60 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
1ff70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ff80 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
1ff90 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
1ffa0 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
1ffb0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1ffc0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
1ffd0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
1ffe0 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
1fff0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
20000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20010 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
20020 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
20030 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
20040 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
20050 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
20060 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
20070 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
20080 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
200a0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
200b0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
200c0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
200d0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
200e0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
200f0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
20100 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71  er count */.  sq
20110 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
20120 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
20130 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
20140 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
20150 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
20160 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
20170 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
20180 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
20190 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
201a0 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
201b0 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
201c0 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
201d0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
201e0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
201f0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20210 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
20220 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
20230 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
20240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
20250 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
20260 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
20270 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
20280 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
20290 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
202a0 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
202b0 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
202c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
202d0 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
202e0 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
202f0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
20300 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
20310 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
20320 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
20330 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
20340 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
20350 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
20360 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
20370 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
20380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20390 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
203a0 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
203b0 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
203e0 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
203f0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
20400 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
20410 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
20420 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
20430 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20450 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
20460 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
20470 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
20480 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
20490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
204a0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
204b0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
204c0 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
204d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
204e0 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
204f0 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
20500 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
20510 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
20520 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
20530 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
20540 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
20550 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
20560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20570 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
20580 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
20590 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
205a0 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
205b0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
205c0 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
205d0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
205e0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
205f0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
20600 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
20610 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20630 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
20640 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
20650 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
20660 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20680 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
20690 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
206a0 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
206b0 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
206d0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
206e0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
206f0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
20700 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
20710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20720 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
20730 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
20740 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
20750 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
20760 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
20770 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
20780 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
20790 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
207a0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
207b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
207c0 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
207d0 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
207e0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
207f0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
20800 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
20810 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
20820 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
20830 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
20840 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
20850 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
20860 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
20870 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
20880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
20890 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
208a0 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
208b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
208c0 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
208d0 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
208e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
208f0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
20900 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
20910 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
20920 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
20930 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
20940 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
20950 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
20960 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
20970 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
20980 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
20990 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
209a0 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
209b0 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
209c0 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
209d0 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
209e0 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
209f0 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
20a00 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
20a10 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
20a20 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20a50 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
20a60 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
20a70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
20a80 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28  TIN_TEST.  int (
20a90 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
20aa0 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
20ab0 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
20ac0 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
20ad0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
20ae0 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
20af0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20b00 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
20b10 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
20b20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
20b30 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
20b40 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
20b50 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
20b60 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
20b70 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
20b80 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
20b90 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
20ba0 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
20bb0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
20bc0 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
20bd0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
20be0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
20bf0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
20c00 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
20c10 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
20c20 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
20c30 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
20c40 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
20c50 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
20c60 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
20c70 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
20c80 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
20c90 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
20ca0 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
20cb0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
20cc0 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
20cd0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
20ce0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
20cf0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
20d00 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
20d10 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
20d20 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
20d30 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
20d40 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
20d50 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
20d60 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
20d70 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
20d80 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
20d90 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
20da0 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
20db0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
20dc0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
20dd0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
20de0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
20df0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
20e00 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
20e10 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
20e20 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
20e30 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
20e40 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
20e50 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
20e60 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
20e70 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
20e80 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
20e90 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
20ea0 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
20eb0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
20ec0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
20ef0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
20f00 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
20f10 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
20f40 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
20f50 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f70 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
20f80 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
20f90 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fc0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
20fd0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
20fe0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
20ff0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21010 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
21020 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f   /* A counter */
21060 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20  .    int iCur;  
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
210a0 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
210b0 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
210e0 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
210f0 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
21100 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
21110 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e        /* Countin
21120 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  g column referen
21130 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ces */.    struc
21140 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75  t CCurHint *pCCu
21150 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  rHint;          
21160 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
21170 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
21180 29 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  ) */.  } u;.};..
21190 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
211a0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
211b0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
211c0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
211d0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
211e0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
211f0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
21200 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
21210 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
21220 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
21230 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
21240 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
21250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
21260 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
21270 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
21280 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
21290 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
212a0 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20   Expr*);../*.** 
212b0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
212c0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
212d0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
212e0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
212f0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
21300 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
21310 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
21320 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
21330 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
21340 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
21350 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
21360 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
21370 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
21380 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
21390 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
213a0 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
213b0 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
213c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
213d0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
213e0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
213f0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
21400 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
21410 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
21420 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
21430 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
21440 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
21450 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
21460 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21480 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
21490 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
214a0 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
214b0 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
214c0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
214d0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
214e0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
214f0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21510 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
21520 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
21530 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
21540 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21560 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
21570 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
21580 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
21590 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
215a0 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
215b0 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
215c0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
215d0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
215e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
215f0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
21600 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
21610 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
21620 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
21630 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
21640 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
21650 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
21660 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
21670 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
21680 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
21690 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
216a0 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
216b0 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
216c0 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
216d0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
216e0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
216f0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
21700 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
21710 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
21720 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
21730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
21740 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
21750 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
21760 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
21770 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
21780 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
21790 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
217a0 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
217b0 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
217c0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
217d0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
217e0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
217f0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
21800 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
21810 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
21820 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
21830 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
21840 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
21850 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
21860 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
21870 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
218a0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
218d0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
218e0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
218f0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
21900 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
21940 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
21950 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
21960 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
21970 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
21980 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
21990 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
219a0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
219b0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
219c0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
219d0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
219e0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
219f0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
21a00 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
21a10 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
21a20 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
21a30 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
21a40 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
21a50 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
21a60 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
21a70 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
21a80 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
21a90 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
21aa0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
21ab0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
21ac0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
21ad0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
21ae0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
21af0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
21b00 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
21b10 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
21b20 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
21b30 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
21b40 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
21b50 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
21b60 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
21b70 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
21b80 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
21b90 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
21ba0 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
21bb0 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
21bc0 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
21bd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
21be0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
21bf0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
21c00 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
21c10 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
21c20 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
21c30 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
21c40 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
21c50 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
21c60 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
21c70 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
21c80 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
21c90 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
21ca0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21cb0 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
21cc0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
21cd0 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
21ce0 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
21cf0 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
21d00 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
21d10 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
21d20 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
21d30 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
21d40 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
21d50 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
21d60 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
21d70 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
21d80 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
21d90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
21da0 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
21db0 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
21dc0 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
21dd0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
21de0 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
21df0 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
21e00 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
21e10 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
21e20 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
21e30 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
21e40 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
21e50 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
21e60 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
21e70 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
21e80 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
21e90 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
21ea0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
21eb0 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
21ec0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
21ed0 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
21ee0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
21ef0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
21f00 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
21f10 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
21f20 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
21f30 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21f40 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
21f50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21f60 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
21f70 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
21f80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21f90 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
21fa0 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
21fb0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
21fc0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21fd0 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
21fe0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21ff0 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
22000 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
22010 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
22020 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
22030 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
22040 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
22050 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
22060 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
22070 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22080 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
22090 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
220a0 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
220b0 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
220c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
220d0 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
220e0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
220f0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
22100 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
22110 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
22120 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
22130 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22140 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
22150 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
22160 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22170 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
22180 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
22190 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
221a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
221b0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
221c0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
221d0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
221e0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
221f0 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
22200 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22210 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
22220 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
22230 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
22240 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
22250 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
22260 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
22270 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
22280 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
22290 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
222a0 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
222b0 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
222c0 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
222d0 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
222e0 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
222f0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
22300 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
22310 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
22320 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
22330 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
22340 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
22350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
22360 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
22370 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
22380 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
22390 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
223a0 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
223b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
223c0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
223d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
223e0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
223f0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
22400 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
22410 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
22420 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
22430 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
22440 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22450 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
22460 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
22470 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
22480 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
22490 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
224a0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
224b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
224c0 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
224d0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
224e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
224f0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
22500 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
22510 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
22520 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
22530 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
22540 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
22550 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
22560 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
22570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
22580 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
22590 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
225a0 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
225b0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
225c0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
225d0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
225e0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
225f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22600 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f  _BUILTIN_TEST.vo
22610 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
22620 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
22630 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
22640 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
22650 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
22660 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
22670 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
22680 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
22690 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
226a0 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
226b0 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
226c0 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
226d0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
226e0 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
226f0 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
22700 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
22710 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
22720 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
22730 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
22740 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
22750 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
22760 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
22770 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
22780 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
22790 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
227a0 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
227b0 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
227c0 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
227d0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
227e0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
227f0 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
22800 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22810 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
22820 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
22830 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
22840 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
22850 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
22860 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66      .#else.# def
22870 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
22880 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
22890 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
228a0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
228b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
228c0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
228d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
228e0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
228f0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
22900 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
22910 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
22920 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
22930 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
22940 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
22950 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
22960 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
22970 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
22980 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22990 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
229a0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
229b0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
229c0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
229d0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
229e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
229f0 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
22a00 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
22a10 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
22a20 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
22a30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
22a40 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
22a50 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
22a60 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
22a70 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
22a80 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
22a90 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
22aa0 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
22ab0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
22ac0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
22ad0 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
22ae0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
22af0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
22b00 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
22b10 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
22b20 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
22b30 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
22b40 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
22b50 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
22b60 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
22b70 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
22b80 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
22b90 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
22ba0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22bb0 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
22bc0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
22bd0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
22be0 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
22bf0 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  t);../* Access t
22c00 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
22c10 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
22c20 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
22c30 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
22c40 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
22c50 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
22c60 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
22c70 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65  x(void);..#ifnde
22c80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
22c90 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
22ca0 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
22cb0 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
22cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22cd0 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
22ce0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
22cf0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
22d00 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22d10 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
22d20 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
22d30 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
22d40 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
22d50 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
22d60 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
22d70 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
22d80 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
22d90 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
22da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22db0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
22dc0 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
22dd0 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
22de0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22df0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
22e00 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
22e10 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
22e20 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
22e30 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
22e40 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51  /.};..#define SQ
22e50 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
22e60 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e  RNAL 0x01.#defin
22e70 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22e80 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f  SQLFUNC  0x02.vo
22e90 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
22ea0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
22eb0 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
22ec0 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
22ed0 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
22ee0 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f  rAccum*, u32, co
22ef0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
22f00 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
22f10 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
22f20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
22f30 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
22f40 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
22f50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
22f60 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
22f70 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
22f80 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
22f90 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
22fa0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
22fb0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
22fc0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
22fd0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
22fe0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
22ff0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
23000 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
23010 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
23020 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
23030 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
23040 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
23050 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
23060 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
23070 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
23080 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
23090 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
230a0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
230b0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
230c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
230d0 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
230e0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
230f0 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
23100 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
23110 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
23120 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
23130 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
23140 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
23150 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
23160 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
23170 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23180 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
23190 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
231a0 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
231b0 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
231c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
231d0 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
231e0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
231f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
23200 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
23210 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
23220 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
23230 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
23240 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
23250 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
23260 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23270 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
23280 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
23290 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
232a0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
232b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
232c0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
232d0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
232e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
232f0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
23300 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
23310 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
23320 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
23330 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
23340 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
23350 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
23360 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
23370 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
23380 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
23390 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
233a0 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
233b0 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
233c0 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
233d0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
233e0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
233f0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
23400 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
23410 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
23420 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
23430 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
23440 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
23450 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
23460 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
23470 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
23480 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
23490 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
234a0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
234b0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
234c0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
234d0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
234e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
234f0 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
23500 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
23510 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
23520 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
23530 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
23540 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23550 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
23560 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
23570 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
23580 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23590 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
235a0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
235b0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
235c0 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
235d0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
235e0 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
235f0 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
23600 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
23610 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
23620 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
23630 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23640 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
23650 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
23660 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
23670 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
23680 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
23690 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
236a0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
236b0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
236c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
236d0 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
236e0 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
236f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23700 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
23710 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23720 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
23730 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
23740 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23750 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
23760 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
23770 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
23780 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
23790 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
237a0 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
237b0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
237c0 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
237d0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
237e0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
237f0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
23800 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
23810 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
23820 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
23830 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
23840 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
23850 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
23860 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
23870 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
23880 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
23890 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
238a0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
238b0 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
238c0 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a  (Table*, Column*
238d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
238e0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
238f0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
23900 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
23910 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
23920 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
23930 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
23940 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
23950 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23960 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
23970 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23980 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
23990 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54  qlite3AddColumnT
239a0 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ype(Parse*,Token
239b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
239c0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
239d0 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
239e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
239f0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
23a00 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
23a10 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
23a20 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
23a30 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
23a40 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23a50 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
23a60 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
23a70 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
23a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
23aa0 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
23ab0 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
23ac0 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
23ad0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23ae0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
23af0 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65  e3CodeOnce(Parse
23b00 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
23b10 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
23b20 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73  _TEST.# define s
23b30 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
23b40 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
23b50 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
23b60 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
23b70 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
23b80 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
23b90 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
23ba0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
23bb0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
23bc0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
23bd0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
23be0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
23bf0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
23c00 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
23c10 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
23c20 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
23c30 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
23c40 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
23c50 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
23c60 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
23c70 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
23c80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23c90 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
23ca0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
23cb0 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
23cc0 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
23cd0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
23ce0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
23cf0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
23d00 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
23d10 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
23d20 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
23d30 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
23d40 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
23d50 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
23d60 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
23d70 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
23d80 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
23d90 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
23da0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
23db0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
23dc0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
23dd0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
23de0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
23df0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
23e00 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23e10 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
23e20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
23e30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
23e40 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
23e50 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
23e60 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
23e70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23e80 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
23e90 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
23ea0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
23eb0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
23ec0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
23ed0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
23ee0 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
23ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23f00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
23f10 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
23f20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23f30 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
23f40 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23f50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23f60 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
23f70 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
23f80 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
23f90 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
23fa0 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
23fb0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
23fc0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
23fd0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
23fe0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
23ff0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
24000 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
24010 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
24020 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
24030 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24040 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
24050 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
24060 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
24070 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
24080 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
24090 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
240a0 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
240b0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
240c0 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
240d0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
240e0 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
240f0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
24100 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
24110 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
24120 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
24130 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
24140 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
24150 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
24160 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
24170 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
24180 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
24190 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
241a0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
241b0 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
241c0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
241d0 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
241e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
241f0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
24200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
24230 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
24240 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
24250 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
24260 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
24270 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
24280 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24290 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
242a0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
242b0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
242c0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
242d0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
242e0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
242f0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
24300 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
24310 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
24320 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
24330 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
24340 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
24350 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
24360 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
24370 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
24380 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
24390 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
243a0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
243b0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
243c0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
243d0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
243e0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
243f0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
24400 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
24410 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
24420 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
24430 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
24460 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24470 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
24480 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
24490 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
244a0 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
244b0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
244c0 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
244d0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
244e0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
244f0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
24500 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
24530 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
24540 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
24550 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
24560 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
24570 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
24580 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
24590 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
245a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
245b0 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
245c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
245d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
245e0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
245f0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
24600 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
24610 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
24620 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
24630 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
24640 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24650 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
24660 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
24670 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
24680 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
24690 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
246a0 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
246b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
246c0 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
246d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
246e0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
246f0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
24700 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
24710 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
24720 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
24730 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
24740 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
24750 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
24760 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
24770 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24780 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
24790 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
247a0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
247b0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
247c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
247d0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
247e0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
247f0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
24800 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
24810 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
24820 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
24830 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
24840 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
24850 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
24860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
24870 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
24880 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
24890 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
248a0 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
248b0 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
248c0 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
248d0 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
248e0 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
248f0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
24900 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
24910 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
24920 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
24930 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
24940 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
24950 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
24960 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
24970 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
24980 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
24990 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
249a0 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
249b0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
249c0 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
249d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
249e0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
249f0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
24a00 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
24a10 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
24a20 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
24a30 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
24a40 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
24a50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24a60 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
24a70 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
24a80 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
24a90 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
24aa0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24ab0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
24ac0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
24ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24ae0 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
24af0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24b00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24b10 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
24b20 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
24b30 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
24b40 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
24b50 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
24b60 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
24b70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24b80 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
24b90 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
24ba0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
24bb0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
24bc0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
24bd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24be0 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
24bf0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
24c00 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24c10 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
24c20 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
24c30 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
24c40 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
24c50 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
24c60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
24c70 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
24c80 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
24c90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24ca0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
24cb0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
24cc0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24cd0 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
24ce0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
24cf0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24d00 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
24d10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
24d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
24d30 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
24d40 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
24d50 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
24d60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
24d70 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
24d80 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
24d90 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
24da0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24db0 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
24dc0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
24dd0 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
24de0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24df0 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
24e00 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
24e10 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
24e20 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
24e30 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
24e40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
24e50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24e60 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
24e70 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
24e80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24e90 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
24ea0 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
24eb0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
24ec0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
24ed0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
24ee0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24ef0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
24f00 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
24f10 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
24f20 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
24f30 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24f40 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
24f50 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
24f60 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
24f70 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
24f80 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
24f90 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
24fa0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
24fb0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24fc0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
24fd0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24fe0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
24ff0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
25000 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25010 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
25020 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
25030 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
25040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
25050 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
25060 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
25070 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
25080 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
25090 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
250a0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
250b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
250c0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
250d0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
250e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
250f0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
25100 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
25110 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25120 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
25130 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
25140 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25150 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
25160 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
25170 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
25180 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
25190 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
251a0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
251b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
251c0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
251d0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
251e0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
251f0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
25200 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
25210 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
25220 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
25230 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
25240 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
25250 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
25260 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
25270 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
25280 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
25290 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
252a0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
252b0 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
252c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
252d0 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
252e0 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
252f0 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
25300 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
25310 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
25320 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
25330 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
25340 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
25350 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
25360 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
25370 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25380 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
25390 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
253a0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
253b0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
253c0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
253d0 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
253e0 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
253f0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
25400 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
25410 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
25420 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25430 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
25440 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25450 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
25460 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
25470 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
25480 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
25490 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
254a0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
254b0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
254c0 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
254d0 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
254e0 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
254f0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
25500 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
25510 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
25520 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
25530 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
25540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25550 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
25560 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
25570 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
25580 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
25590 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
255a0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
255b0 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
255c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
255d0 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
255e0 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
255f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25600 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
25610 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
25620 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
25630 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
25640 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
25650 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
25660 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
25670 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
25680 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
25690 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
256a0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
256b0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
256c0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
256d0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
256e0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
256f0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
25700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25720 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
25730 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
25740 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
25750 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
25760 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
25770 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
25780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
25790 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
257a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
257b0 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
257c0 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
257d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
257e0 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
257f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25800 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25810 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
25820 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25830 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
25840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
25850 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
25860 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
25870 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
25880 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
25890 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
258a0 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
258b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
258c0 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
258d0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
258e0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
258f0 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
25900 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
25910 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
25920 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
25930 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
25940 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
25950 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
25960 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
25970 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
25980 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
25990 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
259a0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
259b0 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
259c0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
259d0 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  );.#if SELECTTRA
259e0 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20  CE_ENABLED.void 
259f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
25a00 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e  Name(Select*,con
25a10 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
25a20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25a30 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41  3SelectSetName(A
25a40 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
25a50 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
25a60 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
25a70 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
25a80 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
25a90 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
25aa0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25ab0 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  int,int,u8,u8);.
25ac0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
25ad0 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
25ae0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
25af0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
25b00 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
25b10 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
25b20 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
25b30 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  rGlobalFunctions
25b40 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
25b50 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
25b60 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
25b70 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
25b80 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
25b90 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
25ba0 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
25bb0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
25bc0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25bd0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
25be0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25bf0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
25c00 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
25c10 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
25c20 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
25c30 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23   int);.#endif..#
25c40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25c50 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
25c60 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
25c70 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
25c80 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
25c90 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
25ca0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cc0 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
25cd0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25ce0 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
25cf0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
25d00 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
25d10 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
25d20 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
25d30 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
25d40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
25d50 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
25d60 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
25d70 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
25d80 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
25d90 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
25da0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
25db0 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
25dc0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
25dd0 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
25de0 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
25df0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
25e00 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
25e10 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
25e20 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
25e30 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
25e60 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
25e70 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
25e80 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
25e90 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
25ea0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
25eb0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
25ec0 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
25ed0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
25ee0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
25ef0 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
25f00 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
25f10 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
25f20 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
25f30 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
25f40 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
25f50 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
25f60 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e3*,Select*);.  
25f70 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
25f80 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
25f90 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
25fa0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
25fe0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
25ff0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
26000 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
26010 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
26020 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
26030 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
26040 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
26050 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
26060 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
26070 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26080 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
26090 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
260a0 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
260b0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
260c0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
260d0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
260e0 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
260f0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
26100 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
26110 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
26120 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
26130 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26140 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
26150 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
26160 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
26170 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69  el : (p)).# defi
26180 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
26190 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
261a0 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73  oplevel==0).#els
261b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
261c0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
261d0 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
261e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
261f0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
26200 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26210 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
26220 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
26230 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
26240 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
26250 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26260 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
26270 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
26280 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
26290 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
262a0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
262b0 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
262c0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
262d0 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
262e0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
262f0 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
26300 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
26310 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64  oplevel(p) 1.# d
26320 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
26330 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
26340 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
26350 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
26360 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
26370 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
26380 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26390 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
263a0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
263b0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
263c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
263d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
263e0 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
263f0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
26400 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26410 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
26420 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
26430 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
26440 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
26450 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
26460 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
26470 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
26480 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
26490 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
264a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
264b0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
264c0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
264d0 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
264e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
264f0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
26500 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
26510 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
26520 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
26530 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
26540 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
26550 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26560 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
26570 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
26580 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
26590 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
265a0 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
265b0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
265c0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
265d0 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
265e0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
265f0 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
26600 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
26610 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
26620 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
26630 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
26640 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
26650 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
26660 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
26670 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
26680 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
26690 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
266a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
266b0 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
266c0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
266d0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
266e0 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
266f0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
26700 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
26710 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
26720 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
26730 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
26740 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
26750 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
26760 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
26770 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
26780 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
26790 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
267a0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
267b0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
267c0 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
267d0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
267e0 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
267f0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
26800 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
26810 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
26820 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
26830 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
26840 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
26850 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
26860 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
26870 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
26880 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
26890 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
268a0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
268b0 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
268c0 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
268d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
268e0 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
268f0 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
26900 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
26910 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
26920 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
26930 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
26940 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
26950 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
26960 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
26970 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
26980 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
26990 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
269a0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
269b0 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
269c0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
269d0 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
269e0 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
269f0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
26a00 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
26a10 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
26a20 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
26a30 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
26a40 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
26a50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
26a60 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
26a70 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
26a80 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
26a90 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
26aa0 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
26ab0 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
26ac0 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
26ad0 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
26ae0 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
26af0 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
26b00 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
26b10 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
26b20 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
26b30 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
26b40 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
26b50 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
26b60 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
26b70 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
26b80 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
26b90 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
26ba0 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
26bb0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
26bc0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
26bd0 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
26be0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
26bf0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
26c00 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
26c10 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
26c20 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
26c30 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
26c40 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
26c50 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
26c60 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
26c70 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
26c80 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
26c90 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
26ca0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
26cb0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
26cc0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
26cd0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
26ce0 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
26cf0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
26d00 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
26d10 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
26d20 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
26d30 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
26d40 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
26d50 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
26d60 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
26d70 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
26d80 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
26d90 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
26da0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
26db0 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
26dc0 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
26dd0 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
26de0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
26df0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
26e00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
26e10 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
26e20 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
26e30 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
26e40 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
26e50 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
26e60 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
26e70 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
26e80 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
26e90 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
26ea0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
26eb0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
26ec0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
26ed0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
26ee0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
26ef0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
26f00 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
26f10 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
26f20 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
26f30 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
26f40 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
26f50 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
26f60 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
26f70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
26f80 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
26f90 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
26fa0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
26fb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
26fc0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
26fd0 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
26fe0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
26ff0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
27000 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
27010 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
27020 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
27030 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
27040 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
27050 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
27060 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
27070 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
27080 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
27090 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
270a0 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
270b0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
270c0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
270d0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
270e0 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
270f0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
27100 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
27110 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
27120 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
27130 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27140 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
27150 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
27160 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
27170 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
27180 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
27190 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
271a0 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
271b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
271c0 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
271d0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
271e0 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
271f0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
27200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
27210 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
27220 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
27230 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
27240 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
27250 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
27260 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
27270 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
27280 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
27290 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
272a0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
272b0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
272c0 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
272d0 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
272e0 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27300 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
27310 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
27320 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
27330 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
27340 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
27350 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
27360 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
27370 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
27380 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
27390 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
273a0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
273b0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
273c0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
273d0 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
273e0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
273f0 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
27400 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
27410 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
27420 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
27430 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
27440 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
27450 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
27460 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
27470 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
27480 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
27490 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
274a0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
274b0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
274c0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
274d0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
274e0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
274f0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
27500 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
27510 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
27520 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
27530 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
27540 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
27550 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
27560 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
27570 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
27580 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
27590 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
275a0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
275b0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
275c0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
275d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
275e0 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
275f0 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
27600 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27610 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
27620 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
27630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
27640 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
27650 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
27660 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
27670 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27680 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
27690 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
276a0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
276b0 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
276c0 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
276d0 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
276e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
276f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27700 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
27710 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
27720 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
27730 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
27740 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
27750 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27760 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
27770 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
27780 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
27790 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
277a0 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
277b0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
277c0 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
277d0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
277e0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
277f0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
27800 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
27810 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
27820 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
27830 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
27840 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
27850 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
27860 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
27870 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
27880 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
27890 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
278a0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
278b0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
278c0 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
278d0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
278e0 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
278f0 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
27900 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
27910 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
27920 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
27930 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
27940 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
27950 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27960 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
27970 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
27980 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27990 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
279a0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
279b0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
279c0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
279d0 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
279e0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
279f0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
27a00 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
27a10 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
27a20 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
27a30 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
27a40 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
27a50 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a  st char*, u8*);.
27a60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
27a70 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
27a80 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
27a90 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
27aa0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
27ab0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
27ac0 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
27ad0 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
27ae0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
27af0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
27b00 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
27b10 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
27b20 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
27b30 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
27b40 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
27b50 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
27b60 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
27b70 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
27b80 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
27b90 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
27ba0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
27bb0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
27bc0 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
27bd0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
27be0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
27bf0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27c00 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
27c10 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
27c20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27c30 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
27c40 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
27c50 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
27c60 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
27c70 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
27c80 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
27c90 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
27ca0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
27cb0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
27cc0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
27cd0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27ce0 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
27cf0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
27d00 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
27d10 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
27d20 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
27d30 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
27d40 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
27d50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27d60 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
27d70 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
27d80 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
27d90 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
27da0 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
27db0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
27dc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
27dd0 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29  d *, .  void (*)
27de0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27df0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
27e00 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
27e10 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
27e20 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
27e30 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
27e40 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
27e50 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
27e60 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
27e70 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c  uctor.);.int sql
27e80 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
27e90 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
27ea0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
27eb0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
27ec0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
27ed0 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
27ee0 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
27ef0 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
27f00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27f10 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
27f20 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
27f30 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
27f40 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
27f50 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
27f60 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
27f70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
27f80 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
27f90 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
27fa0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
27fb0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
27fc0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
27fd0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
27fe0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
27ff0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
28000 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
28010 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
28020 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
28030 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
28040 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
28050 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
28060 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
28070 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
28080 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
28090 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
280a0 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
280b0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
280c0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
280d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
280e0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
280f0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
28100 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
28110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
28120 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
28130 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
28140 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
28150 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
28160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
28170 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
28180 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28190 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
281a0 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
281b0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
281c0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
281d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
281e0 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
281f0 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
28200 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
28210 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
28220 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
28230 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
28240 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
28250 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
28260 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
28270 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
28280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28290 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
282a0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
282b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
282c0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
282d0 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
282e0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
282f0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
28300 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
28310 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
28320 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
28330 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
28340 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
28350 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28360 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
28370 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
28380 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
28390 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
283a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
283b0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
283c0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
283d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
283e0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
283f0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
28400 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
28410 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
28420 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
28430 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
28440 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
28450 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
28460 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
28470 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
28480 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
28490 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
284a0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
284b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
284c0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
284d0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
284e0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
284f0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
28500 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
28510 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28520 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
28530 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
28540 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
28550 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28560 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
28570 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
28580 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
28590 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
285a0 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
285b0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
285c0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
285d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
285e0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
285f0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
28600 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
28610 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
28620 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
28630 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
28640 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
28650 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
28660 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
28670 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
28680 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
28690 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
286a0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
286b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
286c0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
286d0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
286e0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
286f0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
28700 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
28710 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
28720 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
28730 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
28740 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28750 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
28760 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28770 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
28780 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
28790 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
287a0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
287b0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
287c0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
287d0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
287e0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
287f0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
28800 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
28810 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
28820 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
28830 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
28840 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
28850 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
28860 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
28870 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
28880 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
28890 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
288a0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
288b0 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
288c0 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
288d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
288e0 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
288f0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
28900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
28910 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
28920 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
28930 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
28940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28950 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
28960 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
28970 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28980 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
28990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
289a0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
289b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
289c0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
289d0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
289e0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
289f0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
28a00 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
28a10 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
28a20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
28a30 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
28a40 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
28a50 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
28a60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
28a70 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
28a80 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
28a90 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
28aa0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
28ab0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
28ac0 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
28ad0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28ae0 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
28af0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
28b00 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
28b10 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
28b20 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
28b30 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
28b40 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
28b50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
28b60 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
28b70 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
28b80 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
28b90 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
28ba0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
28bb0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
28bc0 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
28bd0 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
28be0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
28bf0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
28c00 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
28c10 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
28c20 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
28c30 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
28c40 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
28c50 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
28c60 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
28c70 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
28c80 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
28c90 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
28ca0 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
28cb0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
28cc0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
28cd0 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
28ce0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
28cf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
28d00 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
28d10 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28d20 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
28d30 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
28d40 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
28d50 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28d60 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
28d70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28d80 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
28d90 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
28da0 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
28db0 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
28dc0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28dd0 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
28de0 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
28df0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
28e00 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
28e10 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
28e20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
28e30 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
28e40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
28e50 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
28e60 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
28e70 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
28e80 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
28e90 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
28ea0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
28eb0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
28ec0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
28ed0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
28ee0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
28ef0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
28f00 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
28f10 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
28f20 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
28f30 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
28f40 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
28f50 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
28f60 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
28f70 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
28f80 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
28f90 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
28fa0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
28fb0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
28fc0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
28fd0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
28fe0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
28ff0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
29000 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
29010 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
29020 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
29030 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
29040 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29050 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
29060 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
29070 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
29080 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
29090 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
290a0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
290b0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
290c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
290d0 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
290e0 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
290f0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
29100 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
29110 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
29120 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
29130 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
29140 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
29150 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
29160 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
29170 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
29180 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
29190 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
291a0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
291b0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
291c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
291d0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
291e0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
291f0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
29200 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
29210 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
29220 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
29230 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
29240 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
29250 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
29260 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
29270 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
29280 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
29290 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
292a0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
292b0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
292c0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
292d0 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
292e0 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
292f0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29300 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
29310 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
29320 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
29330 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
29340 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
29350 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
29360 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
29370 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
29380 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
29390 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
293a0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
293b0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
293c0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
293d0 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
293e0 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
293f0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
29400 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
29410 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
29420 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
29430 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
29440 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
29450 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
29460 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
29470 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
29480 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
29490 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
294a0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
294b0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
294c0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
294d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
294e0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
294f0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
29500 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
29510 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
29520 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29530 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
29540 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
29550 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
29560 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
29570 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
29580 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
29590 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
295a0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
295b0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
295c0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
295d0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
295e0 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
295f0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
29600 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
29610 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
29620 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
29630 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
29640 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
29650 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
29660 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
29670 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
29680 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
29690 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
296a0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
296b0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
296c0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
296d0 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
296e0 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
296f0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
29700 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
29710 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
29720 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
29730 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
29740 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
29750 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
29760 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
29770 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
29780 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
29790 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
297a0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
297b0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
297c0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
297d0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
297e0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
297f0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
29800 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
29810 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
29820 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
29830 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
29840 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
29850 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
29860 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
29870 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
29880 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
29890 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
298a0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
298b0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
298c0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
298d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
298e0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
298f0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
29900 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
29910 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
29920 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
29930 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29940 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
29950 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
29960 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
29970 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
29980 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
29990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
299a0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
299b0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
299c0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
299d0 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
299e0 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
299f0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
29a00 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
29a10 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
29a20 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
29a30 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
29a40 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
29a50 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
29a60 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
29a70 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
29a80 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
29a90 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
29aa0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
29ab0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
29ac0 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
29ad0 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
29ae0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29af0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
29b00 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
29b10 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
29b20 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
29b30 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
29b40 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
29b50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29b60 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
29b70 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
29b80 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
29b90 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
29ba0 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
29bb0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29bc0 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
29bd0 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
29be0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
29bf0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
29c00 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
29c10 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
29c20 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
29c30 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
29c40 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
29c50 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
29c60 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
29c70 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
29c80 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
29c90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
29ca0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
29cb0 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
29cc0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   *);.#endif../*.
29cd0 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
29ce0 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20  _ENABLE IOTRACE 
29cf0 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20  exists then the 
29d00 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a  global variable.
29d10 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ** sqlite3IoTrac
29d20 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
29d30 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20  o a printf-like 
29d40 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a  routine used to.
29d50 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61  ** print I/O tra
29d60 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a  cing messages. .
29d70 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
29d80 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
29d90 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
29da0 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
29db0 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
29dc0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
29dd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
29de0 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
29df0 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
29e00 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
29e10 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
29e20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
29e30 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
29e40 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29e50 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
29e60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
29e70 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
29e80 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
29e90 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
29ea0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
29eb0 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
29ec0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
29ed0 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
29ee0 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
29ef0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
29f00 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
29f10 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
29f20 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
29f30 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
29f40 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
29f50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
29f60 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
29f70 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
29f80 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
29f90 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
29fa0 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
29fb0 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
29fc0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
29fd0 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
29fe0 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
29ff0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2a000 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2a010 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
2a020 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
2a030 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2a040 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2a050 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2a060 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2a070 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2a080 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
2a090 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2a0a0 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
2a0b0 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
2a0c0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2a0d0 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
2a0e0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
2a0f0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2a100 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
2a110 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2a120 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2a130 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2a140 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2a150 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2a160 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
2a170 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
2a180 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
2a190 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
2a1a0 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
2a1b0 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
2a1c0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
2a1d0 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
2a1e0 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
2a1f0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
2a200 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
2a210 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
2a220 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
2a230 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
2a240 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
2a250 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
2a260 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
2a270 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
2a280 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
2a290 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
2a2a0 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
2a2b0 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
2a2c0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
2a2d0 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
2a2e0 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
2a2f0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
2a300 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
2a310 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
2a320 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
2a330 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
2a340 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
2a350 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2a360 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
2a370 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
2a380 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2a390 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2a3a0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2a3b0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2a3c0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2a3d0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2a3e0 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2a3f0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2a400 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2a410 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2a420 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2a430 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2a440 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2a450 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2a460 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2a470 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2a480 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2a490 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2a4a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2a4b0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2a4c0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2a4d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a4e0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2a4f0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2a500 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2a510 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2a520 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2a530 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2a540 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2a550 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2a560 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2a570 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2a580 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2a590 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2a5a0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2a5b0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2a5c0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
2a5d0 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
2a5e0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2a5f0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2a600 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
2a610 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2a620 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2a630 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2a640 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2a650 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2a660 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2a670 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2a680 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2a690 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2a6a0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2a6b0 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2a6c0 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2a6d0 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2a6e0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2a6f0 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
2a700 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2a710 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2a720 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
2a730 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2a740 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  ;.#endif..#endif
2a750 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48   /* _SQLITEINT_H
2a760 5f 20 2a 2f 0a                                   _ */.